summaryrefslogtreecommitdiffstats
diff options
-rw-r--r--source/fs_mount_options.txt41
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.