An example implementation of supporting per-file DAX flag for virtiofsd, where DAx is enabled for files larger than 1M size. Signed-off-by: Jeffle Xu <jefflexu@xxxxxxxxxxxxxxxxx> --- contrib/virtiofsd/fuse_kernel.h | 4 +++- contrib/virtiofsd/fuse_lowlevel.c | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/contrib/virtiofsd/fuse_kernel.h b/contrib/virtiofsd/fuse_kernel.h index d2b7ccf96b..9c476b7021 100644 --- a/contrib/virtiofsd/fuse_kernel.h +++ b/contrib/virtiofsd/fuse_kernel.h @@ -165,6 +165,8 @@ /** The node ID of the root inode */ #define FUSE_ROOT_ID 1 +#define FUSE_ATTR_DAX (1 << 1) + /* Make sure all structures are padded to 64bit boundary, so 32bit userspace works under 64bit kernels */ @@ -184,7 +186,7 @@ struct fuse_attr { uint32_t gid; uint32_t rdev; uint32_t blksize; - uint32_t padding; + uint32_t flags; }; struct fuse_kstatfs { diff --git a/contrib/virtiofsd/fuse_lowlevel.c b/contrib/virtiofsd/fuse_lowlevel.c index 046a1b4a02..d8a3873246 100644 --- a/contrib/virtiofsd/fuse_lowlevel.c +++ b/contrib/virtiofsd/fuse_lowlevel.c @@ -60,6 +60,9 @@ static void convert_stat(const struct stat *stbuf, struct fuse_attr *attr) attr->atimensec = ST_ATIM_NSEC(stbuf); attr->mtimensec = ST_MTIM_NSEC(stbuf); attr->ctimensec = ST_CTIM_NSEC(stbuf); + + if (stbuf->st_size >= 1048576) + attr->flags |= FUSE_ATTR_DAX; } static void convert_attr(const struct fuse_setattr_in *attr, struct stat *stbuf) -- 2.27.0