config OVERLAY_FS
	tristate "Overlay filesystem support"
	select EXPORTFS
	help
	  An overlay filesystem combines two filesystems - an 'upper' filesystem
	  and a 'lower' filesystem.  When a name exists in both filesystems, the
	  object in the 'upper' filesystem is visible while the object in the
	  'lower' filesystem is either hidden or, in the case of directories,
	  merged with the 'upper' object.

	  For more information see Documentation/filesystems/overlayfs.txt

config OVERLAY_FS_REDIRECT_DIR
	bool "Overlayfs: turn on redirect directory feature by default"
	depends on OVERLAY_FS
	help
	  If this config option is enabled then overlay filesystems will use
	  redirects when renaming directories by default.  In this case it is
	  still possible to turn off redirects globally with the
	  "redirect_dir=off" module option or on a filesystem instance basis
	  with the "redirect_dir=off" mount option.

	  Note, that redirects are not backward compatible.  That is, mounting
	  an overlay which has redirects on a kernel that doesn't support this
	  feature will have unexpected results.

	  If unsure, say N.

config OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW
	bool "Overlayfs: follow redirects even if redirects are turned off"
	default y
	depends on OVERLAY_FS
	help
	  Disable this to get a possibly more secure configuration, but that
	  might not be backward compatible with previous kernels.

	  If backward compatibility is not an issue, then it is safe and
	  recommended to say N here.

	  For more information, see Documentation/filesystems/overlayfs.txt

	  If unsure, say Y.

config OVERLAY_FS_INDEX
	bool "Overlayfs: turn on inodes index feature by default"
	depends on OVERLAY_FS
	help
	  If this config option is enabled then overlay filesystems will use
	  the index directory to map lower inodes to upper inodes by default.
	  In this case it is still possible to turn off index globally with the
	  "index=off" module option or on a filesystem instance basis with the
	  "index=off" mount option.

	  The inodes index feature prevents breaking of lower hardlinks on copy
	  up.

	  Note, that the inodes index feature is not backward compatible.
	  That is, mounting an overlay which has an inodes index on a kernel
	  that doesn't support this feature will have unexpected results.

	  If unsure, say N.

config OVERLAY_FS_NFS_EXPORT
	bool "Overlayfs: turn on NFS export feature by default"
	depends on OVERLAY_FS
	depends on OVERLAY_FS_INDEX
	depends on !OVERLAY_FS_METACOPY
	help
	  If this config option is enabled then overlay filesystems will use
	  the index directory to decode overlay NFS file handles by default.
	  In this case, it is still possible to turn off NFS export support
	  globally with the "nfs_export=off" module option or on a filesystem
	  instance basis with the "nfs_export=off" mount option.

	  The NFS export feature creates an index on copy up of every file and
	  directory.  This full index is used to detect overlay filesystems
	  inconsistencies on lookup, like redirect from multiple upper dirs to
	  the same lower dir.  The full index may incur some overhead on mount
	  time, especially when verifying that directory file handles are not
	  stale.

	  Note, that the NFS export feature is not backward compatible.
	  That is, mounting an overlay which has a full index on a kernel
	  that doesn't support this feature will have unexpected results.

	  Most users should say N here and enable this feature on a case-by-
	  case basis with the "nfs_export=on" mount option.

	  Say N unless you fully understand the consequences.

config OVERLAY_FS_XINO_AUTO
	bool "Overlayfs: auto enable inode number mapping"
	default n
	depends on OVERLAY_FS
	help
	  If this config option is enabled then overlay filesystems will use
	  unused high bits in undelying filesystem inode numbers to map all
	  inodes to a unified address space.  The mapped 64bit inode numbers
	  might not be compatible with applications that expect 32bit inodes.

	  If compatibility with applications that expect 32bit inodes is not an
	  issue, then it is safe and recommended to say Y here.

	  For more information, see Documentation/filesystems/overlayfs.txt

	  If unsure, say N.

config OVERLAY_FS_METACOPY
	bool "Overlayfs: turn on metadata only copy up feature by default"
	depends on OVERLAY_FS
	select OVERLAY_FS_REDIRECT_DIR
	help
	  If this config option is enabled then overlay filesystems will
	  copy up only metadata where appropriate and data copy up will
	  happen when a file is opened for WRITE operation. It is still
	  possible to turn off this feature globally with the "metacopy=off"
	  module option or on a filesystem instance basis with the
	  "metacopy=off" mount option.

	  Note, that this feature is not backward compatible.  That is,
	  mounting an overlay which has metacopy only inodes on a kernel
	  that doesn't support this feature will have unexpected results.

	  If unsure, say N.
