[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <176169813732.1427432.723555047424035008.stgit@frogsfrogsfrogs>
Date: Tue, 28 Oct 2025 18:02:10 -0700
From: "Darrick J. Wong" <djwong@...nel.org>
To: djwong@...nel.org, bschubert@....com
Cc: linux-ext4@...r.kernel.org, linux-fsdevel@...r.kernel.org,
bernd@...ernd.com, miklos@...redi.hu, joannelkoong@...il.com, neal@...pa.dev
Subject: [PATCH 11/22] libfuse: support direct I/O through iomap
From: Darrick J. Wong <djwong@...nel.org>
Make it so that fuse servers can ask the kernel fuse driver to use iomap
to support direct IO.
Signed-off-by: "Darrick J. Wong" <djwong@...nel.org>
---
include/fuse_common.h | 2 ++
include/fuse_kernel.h | 3 +++
lib/fuse_lowlevel.c | 2 ++
3 files changed, 7 insertions(+)
diff --git a/include/fuse_common.h b/include/fuse_common.h
index faf0bc57bcdbe6..191d9749960992 100644
--- a/include/fuse_common.h
+++ b/include/fuse_common.h
@@ -1223,6 +1223,8 @@ static inline bool fuse_iomap_need_write_allocate(unsigned int opflags,
/* enable fsdax */
#define FUSE_IFLAG_DAX (1U << 0)
+/* use iomap for this inode */
+#define FUSE_IFLAG_IOMAP (1U << 1)
/* ----------------------------------------------------------- *
* Compatibility stuff *
diff --git a/include/fuse_kernel.h b/include/fuse_kernel.h
index 378019cc15cfd3..38aa03dce17e53 100644
--- a/include/fuse_kernel.h
+++ b/include/fuse_kernel.h
@@ -242,6 +242,7 @@
*
* 7.99
* - add FUSE_IOMAP and iomap_{begin,end,ioend} for regular file operations
+ * - add FUSE_ATTR_IOMAP to enable iomap for specific inodes
*/
#ifndef _LINUX_FUSE_H
@@ -582,9 +583,11 @@ struct fuse_file_lock {
*
* FUSE_ATTR_SUBMOUNT: Object is a submount root
* FUSE_ATTR_DAX: Enable DAX for this file in per inode DAX mode
+ * FUSE_ATTR_IOMAP: Use iomap for this inode
*/
#define FUSE_ATTR_SUBMOUNT (1 << 0)
#define FUSE_ATTR_DAX (1 << 1)
+#define FUSE_ATTR_IOMAP (1 << 2)
/**
* Open flags
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index 8f5ab2f8e059fd..e0d18844098971 100644
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -125,6 +125,8 @@ static void convert_stat(const struct stat *stbuf, struct fuse_attr *attr,
attr->flags = 0;
if (iflags & FUSE_IFLAG_DAX)
attr->flags |= FUSE_ATTR_DAX;
+ if (iflags & FUSE_IFLAG_IOMAP)
+ attr->flags |= FUSE_ATTR_IOMAP;
}
static void convert_attr(const struct fuse_setattr_in *attr, struct stat *stbuf)
Powered by blists - more mailing lists