config AUFS
 tristate "Another unionfs"
 help
 Aufs is a stackable unification filesystem such as Unionfs,
 which unifies several directories and provides a merged single
 directory.
 In the early days, aufs was entirely re-designed and
 re-implemented Unionfs Version 1.x series. After many original
 ideas, approaches and improvements, it becomes totally
 different from Unionfs while keeping the basic features.
 See Unionfs for the basic features.
if AUFS
comment "These options are for 2.6.23.9lw"
config AUFS_FAKE_DM
 bool "Use simplified (fake) nameidata"
 depends on AUFS
 default y
 help
 Faking nameidata (linux kernel internal data), you can get
 better performance in some cases.
 When you use NFS as an aufs branch or dlgt aufs mount option,
 you need to disable this configuration.
choice
 prompt "Maximum number of branches"
 depends on AUFS
 default AUFS_BRANCH_MAX_127
 help
 Specifies the maximum number of branches (or member directories) in a single aufs. The larger value consumes more system resources and has an impact to performance.
config AUFS_BRANCH_MAX_127
 bool "127"
 help
 Specifies the maximum number of branches (or member directories) in a single aufs. The larger value consumes more system resources and has an impact to performance.
config AUFS_BRANCH_MAX_511
 bool "511"
 help
 Specifies the maximum number of branches (or member directories) in a single aufs. The larger value consumes more system resources and has an impact to performance.
config AUFS_BRANCH_MAX_1023
 bool "1023"
 help
 Specifies the maximum number of branches (or member directories) in a single aufs. The larger value consumes more system resources and has an impact to performance.
config AUFS_BRANCH_MAX_32767
 bool "32767"
 help
 Specifies the maximum number of branches (or member directories) in a single aufs. The larger value consumes more system resources and has an impact to performance.
endchoice
config AUFS_SYSAUFS
 bool "Use <sysfs>/fs/aufs"
 depends on AUFS
 depends on SYSFS
 default y
 help
 Aufs creates some files under sysfs for various purposes.
 If the number of your branches is large or their path is long
 and you meet the limitation of mount(8) or /etc/mtab, you need
 to enable this option and set aufs module parameter brs=1.
 See detail in aufs.5.
comment "SYSFS and AUFS_SYSAUFS are disabled"
 depends on SYSFS = n
config AUFS_HINOTIFY
 bool "Use inotify to detect actions on a branch"
 depends on AUFS
 depends on INOTIFY
 default n
 help
 If you want to modify files on branches directly, eg. bypassing aufs,
 and want aufs to detect the changes of them fully, then enable this
 option and use 'udba=inotify' mount option.
 It will damage the performance.
 See detail in aufs.5.
comment "INOTIFY and AUFS_HINOTIFY are disabled"
 depends on INOTIFY = n
config AUFS_EXPORT
 bool "NFS-exportable aufs"
 depends on AUFS
 depends on (AUFS = y && EXPORTFS = y) || (AUFS = m && EXPORTFS)
 default n
 help
 If you want to export your mounted aufs, then enable this
 option. There are several requirements to export aufs.
 See detail in aufs.5.
comment "EXPORTFS and AUFS_EXPORT are disabled"
 depends on AUFS
 depends on EXPORTFS = n
comment "AUFS_EXPORT is disabled since EXPORTFS is a module but AUFS"
 depends on AUFS
 depends on EXPORTFS = m && AUFS = y
config AUFS_ROBR
 bool "Aufs as an readonly branch of another aufs"
 depends on AUFS
 default n
 help
 If you want make your aufs to be a part of another aufs, then
 enable this option. In other words, you can specify your aufs
 path in 'br:' mount option for another aufs, but cannot
 specify 'rw' as the branch permission.
 It will damage the performance.
 See detail in aufs.5.
config AUFS_DLGT
 bool "Delegate the internal branch access the kernel thread"
 depends on AUFS
 default n
 help
 If you want aufs to delegate
 the internal access to the branches which is made by aufs, to
 the kernel thread, in order to hide the access issued by your
 application from your LSM or something or make your
 application to be traced strictly by the task I/O accounting,
 then enable this option and use 'dlgt' mount option.
 It will damage the performance.
 See detail in aufs.5.
config AUFS_SHWH
 bool "show whiteouts"
 depends on AUFS
 default n
 help
 If you want to make the whiteouts in aufs visible, then enable
 this option and specify 'shwh' mount option. Although it may
 sounds like philosophy or something, but in technically it
 simply shows the name of whiteout with keeping its behaviour.
config AUFS_RR_SQUASHFS
 bool "Make squashfs branch RR (real readonly) by default"
 depends on AUFS
 default y
 help
 If you use squashfs or LZMA patched squashfs as an aufs branch
 and want to set '=rr' to it by default, then enable this
 configuration.
 'rr' stands for real readonly and it optimizes some aspects of
 'ro.'
 See detail in aufs.5.
config AUFS_SPLICE_PATCH
 bool "splice.patch for sendfile(2) and splice(2)"
 depends on AUFS
 default n
 help
 If you use 'loopback mount' on a fs-image file, or use
 splice(2) or sendfile(2) systemcall in aufs, then you need to
 apply the patch 'CVS_TREE/aufs/patch/splice.patch' to your
 kernel source, and enable this configuration.
 The splice.patch makes the kernel function do_splice_to/from()
 global and exports them to modules.
config AUFS_PUT_FILP_PATCH
 bool "put_filp.patch for NFS branch"
 depends on AUFS
 depends on AUFS = m
 depends on NFS_FS
 default n
 help
 If you build aufs as a module and use mounted NFS as an aufs
 branch filesystem, then you need to apply the patch
 'CVS_TREE/aufs/patch/put_filp.patch' to your kernel source,
 and enable this configuration.
 The put_filp.patch exports a kernel function put_filp() to
 modules.
comment "NFS_FS and AUFS_PUT_FILP_PATCH are disabled"
 depends on AUFS
 depends on NFS_FS = n
config AUFS_LHASH_PATCH
 bool "lhash.patch for NFS branch"
 depends on AUFS
 depends on NFS_FS
 depends on AUFS_FAKE_DM = n
 default n
 help
 If you use mounted NFS as an aufs branch filesystem, then you
 need to apply the patch 'CVS_TREE/aufs/patch/lhash.patch' (or
 lhash-2.6.22.patch for linux-2.6.22 and later) to your kernel
 source, and enable this configuration.
 The patch file makes the kernel function __lookup_hash() global
 and exports it to modules.
comment "NFS_FS and AUFS_LHASH_PATCH are disabled"
 depends on AUFS
 depends on NFS_FS = n
comment "AUFS_LHASH_PATCH is disabled since AUFS_FAKE_DM is enabled"
 depends on AUFS
 depends on AUFS_FAKE_DM
config AUFS_BR_NFS
 bool
 depends on AUFS
 depends on NFS_FS
 depends on !AUFS_FAKE_DM
 default n if (!AUFS_LHASH_PATCH || !(AUFS = y || AUFS_PUT_FILP_PATCH) || AUFS_FAKE_DM)
 default y
config AUFS_BR_XFS
 bool
 depends on AUFS
 depends on XFS_FS
 default n
config AUFS_FSYNC_SUPER_PATCH
 bool "fsync_super-2.6.xx.patch was applied or not"
 depends on AUFS
 depends on AUFS = m
 default n
 help
 If you build aufs as a module and want to flush everything for
 branch filesystems which are not marked as 'rr' nor 'rr+wh' at
 umount or remount time, then you need to apply the patch
 'CVS_TREE/aufs/patch/fsync_super-2.6.16.patch' or
 '...-2.6.19.patch' to your kernel source, and enable this
 configuration.
 It may be helpful at shutdown time in case of your aufs is a
 root filesystem. But this behaviour will not guarantee the
 consistency of branch filesystems. To guarantee it, try the
 approach described in the aufs manual, and don't forget
 installing auplink script.
 The fsync_super-2.6.xx.patch does nothing but exports a kernel
 function fsync_super() to modules.
config AUFS_DENY_WRITE_ACCESS_PATCH
 bool "deny_write_access.patch was applied or not"
 depends on AUFS
 depends on AUFS = m
 default n
 help
 A security enhancement to deny writing to a running executable
 which exists on an aufs branch filesystem and executed through
 aufs. If you applied
 'CVS_TREE/aufs/patch/deny_write_access.patch' to your kernel
 and you are compiling aufs as a module, then enable this
 option.
 The write_deny_access.patch does nothing but export the
 function.
config AUFS_WORKAROUND_FUSE
 bool "Special handling for FUSE-based filesystem"
 depends on AUFS && FUSE_FS
 default n
 help
 A FUSE-based filesystem may not initialize its inode
 attributes and the FUSE developer thinks the inode attributes
 in a positive dentry which is returned by VFS lookup operation
 are not reliable.
 If you use a FUSE-based filesystem as an aufs branch, and it
 customizes the inode attribute on it without overriding
 fuse_lowlevel_ops.lookup, probably you need to enable this
 configuration.
 If you enable this configuration, aufs calls getattr operation
 in every lookup and revalidate operation for the FUSE-based
 filesystem branch.
 It will damage the performance even if you don't use a
 FUSE-based filesystem branch.
config AUFS_DEBUG
 bool "Debug aufs"
 depends on AUFS
 default y
 help
 Enable this to compile aufs internal debug code.
 The performance will be damaged.
config AUFS_MAGIC_SYSRQ
 bool
 depends on AUFS
 depends on AUFS_DEBUG
 depends on MAGIC_SYSRQ
 depends on AUFS_SYSAUFS
 default y
config AUFS_COMPAT
 bool "Compatibility with Unionfs (obsolete)"
 depends on AUFS
 default n
 help
 This makes aufs compatible with unionfs-style mount options and some
 behaviours.
 The dirs= mount option and =nfsro branch permission flag are always
 interpreted as br: mount option and =ro flag respectively. The
 'debug', 'delete' and 'imap' mount options are ignored.
 If you disable this option, you will get,
 - aufs issues a warning about the ignored mount options
 - the default branch permission flag is set. RW for the first branch,
   and RO for the rests.
 - the name of a internal file which represents the directory is
   'opaque', becomes '.wh..wh..opq'
 - the 'diropq=w' mount option is set by default
endif
