
The SGI XFS Filesystem
======================

XFS is a high performance journaling filesystem which originated
on the SGI IRIX platform.  It is completely multi-threaded, can
support large files and large filesystems, extended attributes,
variable block sizes, is extent based, and makes extensive use of
Btrees (directories, extents, free space) to aid both performance
and scalability.

Refer to the documentation at http://oss.sgi.com/projects/xfs/
for further details.  This implementation is on-disk compatible
with the IRIX version of XFS.


Mount Options
=============

When mounting an XFS filesystem, the following options are accepted.

  biosize=size
	Sets the preferred buffered I/O size (default size is 64K).
	"size" must be expressed as the logarithm (base2) of the
	desired I/O size.
	Valid values for this option are 14 through 16, inclusive
	(i.e. 16K, 32K, and 64K bytes).  On machines with a 4K
	pagesize, 13 (8K bytes) is also a valid size.
	The preferred buffered I/O size can also be altered on an
	individual file basis using the ioctl(2) system call.

  ikeep/noikeep
	When inode clusters are emptied of inodes, keep them around
	on the disk (ikeep) - this is the traditional XFS behaviour
	and is still the default for now.  Using the noikeep option,
	inode clusters are returned to the free space pool.

  logbufs=value
	Set the number of in-memory log buffers.  Valid numbers range
	from 2-8 inclusive.
	The default value is 8 buffers for filesystems with a
	blocksize of 64K, 4 buffers for filesystems with a blocksize
	of 32K, 3 buffers for filesystems with a blocksize of 16K
	and 2 buffers for all other configurations.  Increasing the
	number of buffers may increase performance on some workloads
	at the cost of the memory used for the additional log buffers
	and their associated control structures.

  logbsize=value
	Set the size of each in-memory log buffer.
	Size may be specified in bytes, or in kilobytes with a "k" suffix.
	Valid sizes for version 1 and version 2 logs are 16384 (16k) and 
	32768 (32k).  Valid sizes for version 2 logs also include 
	65536 (64k), 131072 (128k) and 262144 (256k).
	The default value for machines with more than 32MB of memory
	is 32768, machines with less memory use 16384 by default.

  logdev=device and rtdev=device
	Use an external log (metadata journal) and/or real-time device.
	An XFS filesystem has up to three parts: a data section, a log
	section, and a real-time section.  The real-time section is
	optional, and the log section can be separate from the data
	section or contained within it.

  noalign
	Data allocations will not be aligned at stripe unit boundaries.

  noatime
	Access timestamps are not updated when a file is read.

  norecovery
	The filesystem will be mounted without running log recovery.
	If the filesystem was not cleanly unmounted, it is likely to
	be inconsistent when mounted in "norecovery" mode.
	Some files or directories may not be accessible because of this.
	Filesystems mounted "norecovery" must be mounted read-only or
	the mount will fail.

  nouuid
	Don't check for double mounted file systems using the file system uuid.
	This is useful to mount LVM snapshot volumes.

  osyncisosync
	Make O_SYNC writes implement true O_SYNC.  WITHOUT this option,
	Linux XFS behaves as if an "osyncisdsync" option is used,
	which will make writes to files opened with the O_SYNC flag set
	behave as if the O_DSYNC flag had been used instead.
	This can result in better performance without compromising
	data safety.
	However if this option is not in effect, timestamp updates from
	O_SYNC writes can be lost if the system crashes.
	If timestamp updates are critical, use the osyncisosync option.

  quota/usrquota/uqnoenforce
	User disk quota accounting enabled, and limits (optionally)
	enforced.

  grpquota/gqnoenforce
	Group disk quota accounting enabled and limits (optionally)
	enforced.

  sunit=value and swidth=value
	Used to specify the stripe unit and width for a RAID device or
	a stripe volume.  "value" must be specified in 512-byte block
	units.
	If this option is not specified and the filesystem was made on
	a stripe volume or the stripe width or unit were specified for
	the RAID device at mkfs time, then the mount system call will
	restore the value from the superblock.  For filesystems that
	are made directly on RAID devices, these options can be used
	to override the information in the superblock if the underlying
	disk layout changes after the filesystem has been created.
	The "swidth" option is required if the "sunit" option has been
	specified, and must be a multiple of the "sunit" value.

sysctls
=======

The following sysctls are available for the XFS filesystem:

  fs.xfs.stats_clear		(Min: 0  Default: 0  Max: 1)
	Setting this to "1" clears accumulated XFS statistics 
	in /proc/fs/xfs/stat.  It then immediately reset to "0".
  	
  fs.xfs.sync_interval		(Min: HZ  Default: 30*HZ  Max: 60*HZ)
	The interval at which the xfssyncd thread for xfs filesystems
	flushes metadata out to disk. This thread will flush log
	activity out, and do some processing on unlinked inodes

  fs.xfs.error_level		(Min: 0  Default: 3  Max: 11)
	A volume knob for error reporting when internal errors occur.
	This will generate detailed messages & backtraces for filesystem
	shutdowns, for example.  Current threshold values are:

		XFS_ERRLEVEL_OFF:       0
		XFS_ERRLEVEL_LOW:       1
		XFS_ERRLEVEL_HIGH:      5

  fs.xfs.panic_mask		(Min: 0  Default: 0  Max: 127)
	Causes certain error conditions to call BUG(). Value is a bitmask; 
	AND together the tags which represent errors which should cause panics:
	
		XFS_NO_PTAG                     0
		XFS_PTAG_IFLUSH                 0x00000001
		XFS_PTAG_LOGRES                 0x00000002
		XFS_PTAG_AILDELETE              0x00000004
		XFS_PTAG_ERROR_REPORT           0x00000008
		XFS_PTAG_SHUTDOWN_CORRUPT       0x00000010
		XFS_PTAG_SHUTDOWN_IOERROR       0x00000020
		XFS_PTAG_SHUTDOWN_LOGERROR      0x00000040

	This option is intended for debugging only.		

  fs.xfs.irix_symlink_mode	(Min: 0  Default: 0  Max: 1)
	Controls whether symlinks are created with mode 0777 (default)
	or whether their mode is affected by the umask (irix mode).

  fs.xfs.irix_sgid_inherit	(Min: 0  Default: 0  Max: 1)
	Controls files created in SGID directories.
	If the group ID of the new file does not match the effective group
	ID or one of the supplementary group IDs of the parent dir, the 
	ISGID bit is cleared if the irix_sgid_inherit compatibility sysctl 
	is set.

  fs.xfs.restrict_chown		(Min: 0  Default: 1  Max: 1)
  	Controls whether unprivileged users can use chown to "give away"
	a file to another user.

  fs.xfs.inherit_sync		(Min: 0  Default: 1  Max 1)
	Setting this to "1" will cause the "sync" flag set 
	by the chattr(1) command on a directory to be
	inherited by files in that directory.

  fs.xfs.inherit_nodump		(Min: 0  Default: 1  Max 1)
	Setting this to "1" will cause the "nodump" flag set 
	by the chattr(1) command on a directory to be
	inherited by files in that directory.

  fs.xfs.inherit_noatime	(Min: 0  Default: 1  Max 1)
	Setting this to "1" will cause the "noatime" flag set 
	by the chattr(1) command on a directory to be
	inherited by files in that directory.

  vm.pagebuf.stats_clear	(Min: 0  Default: 0  Max: 1)
	Setting this to "1" clears accumulated pagebuf statistics 
	in /proc/fs/pagebuf/stat.  It then immediately reset to "0".
  	
  vm.pagebuf.flush_age		(Min: 1*HZ  Default: 15*HZ  Max: 300*HZ)
	The age at which dirty metadata buffers are flushed to disk

  vm.pagebuf.flush_int		(Min: HZ/2  Default: HZ  Max: 30*HZ)
	The interval at which the list of dirty metadata buffers is
	scanned.
