diff options
-rw-r--r-- | source/fs_mount_options.txt | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/source/fs_mount_options.txt b/source/fs_mount_options.txt index 65f0829..a583db8 100644 --- a/source/fs_mount_options.txt +++ b/source/fs_mount_options.txt @@ -48,16 +48,16 @@ As of kernel 5.8 xfs supports the new per-file dax configuration. in-core inode state (S_DAX) will be overridden until the filesystem is remounted with dax=inode and the inode is evicted from kernel memory. -==== Details ==== +==== Examples and details ==== There are 2 per-file dax flags. One is a persistent inode setting (FS_XFLAG_DAX) and the other is a volatile flag indicating the active state of the feature (S_DAX). -FS_XFLAG_DAX is preserved within the filesystem. This persistent config setting can be set, cleared and/or queried using the FS_IOC_FS[GS]ETXATTR ioctl (see ioctl_xfs_fsgetxattr(2)) or an utility such as 'xfs_io'. +FS_XFLAG_DAX is preserved within the file system. This persistent config setting can be set, cleared and/or queried using the FS_IOC_FS[GS]ETXATTR ioctl (see ioctl_xfs_fsgetxattr(2)) or an utility such as 'xfs_io'. New files and directories automatically inherit FS_XFLAG_DAX from their parent directory _when_ _created_. Therefore, setting FS_XFLAG_DAX at directory creation time can be used to set a default behavior for an entire sub-tree. -To clarify inheritance, here are 3 examples when using the "-o dax=inode" [default] option: +To clarify inheritance mount the file system with the inode option. <code> $ mount /dev/pmem0p2 /mnt/xfs-pmem0 @@ -69,24 +69,30 @@ Is equivalent to: $ mount -o dax=inode /dev/pmem0p2 /mnt/xfs-pmem0 </code> -=== Example A: === +And here are 3 examples showing how to enable dax on individual files and/or directories. + +=== Inheritance Example A: === <code> $ mkdir -p a/b/c $ xfs_io -c 'chattr +x' a -$ mkdir a/b/c/d -$ mkdir a/e +$ xfs_io -c 'lsattr' a +--------------x- a +$ mkdir -p a/b/c/d +$ mkdir -p a/e </code> Results in: dax: a,e no dax: b,c,d -=== Example B: === +=== Inheritance Example B: === <code> $ mkdir a $ xfs_io -c 'chattr +x' a +$ xfs_io -c 'lsattr' a +--------------x- a $ mkdir -p a/b/c/d </code> @@ -95,13 +101,14 @@ $ mkdir -p a/b/c/d dax: a,b,c,d no dax: -=== Example C: === - +=== Inheritance Example C: === <code> $ mkdir -p a/b/c $ xfs_io -c 'chattr +x' c -$ mkdir a/b/c/d +$ xfs_io -c 'lsattr' c +--------------x- c +$ mkdir -p a/b/c/d </code> Results in: @@ -110,8 +117,20 @@ $ mkdir a/b/c/d no dax: a,b -The current enabled state (S_DAX) is set when a file inode is instantiated in memory by the kernel. It is set based on the underlying media support, the value of FS_XFLAG_DAX and the filesystem's dax mount option. +=== Seeing if a file is using dax === + +The current enabled state (S_DAX) is set when a file inode is instantiated in memory by the kernel. It is set based on the underlying media support, the value of FS_XFLAG_DAX and the file system's dax mount option. statx can be used to query S_DAX. NOTE that only regular files will ever have S_DAX set and therefore statx will never indicate that S_DAX is set on directories. +Continuing with Example C above we create a file foo in a dax enabled directory and it is enabled for dax with the FS_XFLAG_DAX set as well as S_DAX being set. + +<code> +$ touch a/b/c/foo +$ xfs_io -c 'lsattr' a/b/c/foo # FS_XFLAG_DAX == true +--------------x- a/b/c/foo +$ xfs_io -c 'statx -r' a/b/c/foo | grep attributes # S_DAX == true +stat.attributes = 0x2000 +</code> + Setting the FS_XFLAG_DAX flag (specifically or through inheritance) occurs even if the underlying media does not support dax and/or the filesystem is overridden with a mount option. |