From: Ira Weiny <ira.we...@intel.com> In order for users to determine if a file is currently operating in DAX mode (effective DAX). Define a statx attribute value and set that attribute if the effective DAX flag is set.
To go along with this we propose the following addition to the statx man page: STATX_ATTR_DAX DAX (cpu direct access) is a file mode that attempts to minimize software cache effects for both I/O and memory mappings of this file. It requires a capable device, a compatible filesystem block size, and filesystem opt-in. It generally assumes all accesses are via cpu load / store instructions which can minimize overhead for small accesses, but adversely affect cpu utilization for large transfers. File I/O is done directly to/from user-space buffers. While the DAX property tends to result in data being transferred synchronously it does not give the guarantees of synchronous I/O that data and necessary metadata are transferred. Memory mapped I/O may be performed with direct mappings that bypass system memory buffering. Again while memory-mapped I/O tends to result in data being transferred synchronously it does not guarantee synchronous metadata updates. A dax file may optionally support being mapped with the MAP_SYNC flag which does allow cpu store operations to be considered synchronous modulo cpu cache effects. Signed-off-by: Ira Weiny <ira.we...@intel.com> --- fs/stat.c | 3 +++ include/uapi/linux/stat.h | 1 + 2 files changed, 4 insertions(+) diff --git a/fs/stat.c b/fs/stat.c index c38e4c2e1221..59ca360c1ffb 100644 --- a/fs/stat.c +++ b/fs/stat.c @@ -77,6 +77,9 @@ int vfs_getattr_nosec(const struct path *path, struct kstat *stat, if (IS_AUTOMOUNT(inode)) stat->attributes |= STATX_ATTR_AUTOMOUNT; + if (inode->i_flags & S_DAX) + stat->attributes |= STATX_ATTR_DAX; + if (inode->i_op->getattr) return inode->i_op->getattr(path, stat, request_mask, query_flags); diff --git a/include/uapi/linux/stat.h b/include/uapi/linux/stat.h index 7b35e98d3c58..5b0962121ef7 100644 --- a/include/uapi/linux/stat.h +++ b/include/uapi/linux/stat.h @@ -169,6 +169,7 @@ struct statx { #define STATX_ATTR_ENCRYPTED 0x00000800 /* [I] File requires key to decrypt in fs */ #define STATX_ATTR_AUTOMOUNT 0x00001000 /* Dir: Automount trigger */ +#define STATX_ATTR_DAX 0x00002000 /* [I] File is DAX */ #endif /* _UAPI_LINUX_STAT_H */ -- 2.20.1