[PATCH V11 2/9] famfs_fuse: Basic fuse kernel ABI enablement for famfs
John Groves <[email protected]> Mon, 20 Jul 2026 03:45:39 +0000
| Newsgroups | dev.linux.lists.fuse-devel,dev.linux.lists.nvdimm,org.kernel.vger.linux-cxl,org.kernel.vger.linux-doc,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <0100019f7da11f42-c1026097-89e3-4a44-93d0-ef0938544d6b-000000@email.amazonses.com> |
From: John Groves <[email protected]>=0D=0A=0D=0AAdd the minimal fuse plumb= ing that later famfs commits build on:=0D=0A=0D=0A- Kconfig: add FUSE_FAM= FS_DAX to control compilation of famfs support=0D=0A within fuse.=0D=0A-= uapi: add the FUSE_DAX_FMAP flag for the INIT request/reply, by which=0D= =0A the server and kernel negotiate famfs (in-kernel fs-dax map) support= =2E=0D=0A- fuse_conn->famfs_iomap to mark a famfs-enabled connection.=0D=0A= =0D=0AReviewed-by: Joanne Koong <[email protected]>=0D=0AReviewed-by= : Dave Jiang <[email protected]>=0D=0ASigned-off-by: John Groves <john= @groves.net>=0D=0A---=0D=0A fs/fuse/Kconfig | 13 +++++++++++++=0D= =0A fs/fuse/fuse_i.h | 3 +++=0D=0A fs/fuse/inode.c | = 6 ++++++=0D=0A include/uapi/linux/fuse.h | 5 +++++=0D=0A 4 files change= d, 27 insertions(+)=0D=0A=0D=0Adiff --git a/fs/fuse/Kconfig b/fs/fuse/Kco= nfig=0D=0Aindex 3a4ae632c94a..17fe1f490cbd 100644=0D=0A--- a/fs/fuse/Kcon= fig=0D=0A+++ b/fs/fuse/Kconfig=0D=0A@@ -76,3 +76,16 @@ config FUSE_IO_URI= NG=0D=0A=20=0D=0A =09 If you want to allow fuse server/client communicat= ion through io-uring,=0D=0A =09 answer Y=0D=0A+=0D=0A+config FUSE_FAMFS_= DAX=0D=0A+=09bool "FUSE support for fs-dax filesystems backed by devdax"=0D= =0A+=09depends on FUSE_FS=0D=0A+=09depends on DEV_DAX_FSDEV=0D=0A+=09defa= ult FUSE_FS=0D=0A+=09help=0D=0A+=09 This enables the fabric-attached mem= ory file system (famfs),=0D=0A+=09 which enables formatting devdax memor= y as a file system. Famfs=0D=0A+=09 is primarily intended for scale-out = shared access to=0D=0A+=09 disaggregated memory.=0D=0A+=0D=0A+=09 To en= able famfs or other fuse/fs-dax file systems, answer Y=0D=0Adiff --git a/= fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h=0D=0Aindex f450194e877f..9c354118c931= 100644=0D=0A--- a/fs/fuse/fuse_i.h=0D=0A+++ b/fs/fuse/fuse_i.h=0D=0A@@ -= 711,6 +711,9 @@ struct fuse_conn {=0D=0A =09/** @sync_init: Is synchronou= s FUSE_INIT allowed=3F */=0D=0A =09unsigned int sync_init:1;=0D=0A=20=0D=0A= +=09/** @famfs_iomap: dev_dax_iomap support for famfs */=0D=0A+=09unsigne= d int famfs_iomap:1;=0D=0A+=0D=0A =09/** @max_stack_depth: Maximum stack = depth for passthrough backing files */=0D=0A =09int max_stack_depth;=0D=0A= =20=0D=0Adiff --git a/fs/fuse/inode.c b/fs/fuse/inode.c=0D=0Aindex 77c21b= 28b6fa..c347471d04b6 100644=0D=0A--- a/fs/fuse/inode.c=0D=0A+++ b/fs/fuse= /inode.c=0D=0A@@ -1406,6 +1406,10 @@ static void process_init_reply(struc= t fuse_args *args, int error)=0D=0A=20=0D=0A =09=09=09if (flags & FUSE_RE= QUEST_TIMEOUT)=0D=0A =09=09=09=09timeout =3D arg->request_timeout;=0D=0A+= =0D=0A+=09=09=09if (IS_ENABLED(CONFIG_FUSE_FAMFS_DAX) &&=0D=0A+=09=09=09 = flags & FUSE_DAX_FMAP)=0D=0A+=09=09=09=09fc->famfs_iomap =3D 1;=0D=0A = =09=09} else {=0D=0A =09=09=09ra_pages =3D fc->max_read / PAGE_SIZE;=0D=0A= =09=09=09fc->no_lock =3D 1;=0D=0A@@ -1473,6 +1477,8 @@ static struct fus= e_init_args *fuse_new_init(struct fuse_mount *fm)=0D=0A =09=09flags |=3D = FUSE_SUBMOUNTS;=0D=0A =09if (IS_ENABLED(CONFIG_FUSE_PASSTHROUGH))=0D=0A =09= =09flags |=3D FUSE_PASSTHROUGH;=0D=0A+=09if (IS_ENABLED(CONFIG_FUSE_FAMFS= _DAX))=0D=0A+=09=09flags |=3D FUSE_DAX_FMAP;=0D=0A=20=0D=0A =09/*=0D=0A =09= * This is just an information flag for fuse server. No need to check=0D=0A= diff --git a/include/uapi/linux/fuse.h b/include/uapi/linux/fuse.h=0D=0Ai= ndex c13e1f9a2f12..25686f088e6a 100644=0D=0A--- a/include/uapi/linux/fuse= =2Eh=0D=0A+++ b/include/uapi/linux/fuse.h=0D=0A@@ -240,6 +240,9 @@=0D=0A = * - add FUSE_COPY_FILE_RANGE_64=0D=0A * - add struct fuse_copy_file_r= ange_out=0D=0A * - add FUSE_NOTIFY_PRUNE=0D=0A+ *=0D=0A+ * 7.46=0D=0A+= * - Add FUSE_DAX_FMAP capability - ability to handle in-kernel fsdax ma= ps=0D=0A */=0D=0A=20=0D=0A #ifndef _LINUX_FUSE_H=0D=0A@@ -448,6 +451,7 @= @ struct fuse_file_lock {=0D=0A * FUSE_OVER_IO_URING: Indicate that clie= nt supports io-uring=0D=0A * FUSE_REQUEST_TIMEOUT: kernel supports timin= g out requests.=0D=0A *=09=09=09 init_out.request_timeout contains the t= imeout (in secs)=0D=0A+ * FUSE_DAX_FMAP: kernel supports dev_dax_iomap (a= ka famfs) fmaps=0D=0A */=0D=0A #define FUSE_ASYNC_READ=09=09(1 << 0)=0D=0A= #define FUSE_POSIX_LOCKS=09(1 << 1)=0D=0A@@ -495,6 +499,7 @@ struct fuse= _file_lock {=0D=0A #define FUSE_ALLOW_IDMAP=09(1ULL << 40)=0D=0A #define = FUSE_OVER_IO_URING=09(1ULL << 41)=0D=0A #define FUSE_REQUEST_TIMEOUT=09(1= ULL << 42)=0D=0A+#define FUSE_DAX_FMAP=09=09(1ULL << 43)=0D=0A=20=0D=0A /= **=0D=0A * CUSE INIT request/reply flags=0D=0A--=20=0D=0A2.53.0=0D=0A=0D= =0A