From: "Darrick J. Wong" <djwong@kernel.org>
To: Jeff Layton <jlayton@kernel.org>
Cc: John Groves <john@jagalactic.com>, John Groves <John@groves.net>,
Miklos Szeredi <miklos@szeredi.hu>,
Dan Williams <djbw@kernel.org>,
Bernd Schubert <bschubert@ddn.com>,
Alison Schofield <alison.schofield@intel.com>,
John Groves <jgroves@micron.com>,
Jonathan Corbet <corbet@lwn.net>, Jake Edge <jake@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
Vishal Verma <vishal.l.verma@intel.com>,
Dave Jiang <dave.jiang@intel.com>,
Matthew Wilcox <willy@infradead.org>, Jan Kara <jack@suse.cz>,
Alexander Viro <viro@zeniv.linux.org.uk>,
David Hildenbrand <david@kernel.org>,
Christian Brauner <brauner@kernel.org>,
Randy Dunlap <rdunlap@infradead.org>,
Amir Goldstein <amir73il@gmail.com>,
Jonathan Cameron <jic23@kernel.org>,
Stefan Hajnoczi <shajnocz@redhat.com>,
Joanne Koong <joannelkoong@gmail.com>,
Josef Bacik <josef@toxicpanda.com>,
Bagas Sanjaya <bagasdotme@gmail.com>,
Chen Linxuan <chenlinxuan@uniontech.com>,
James Morse <james.morse@arm.com>, Fuad Tabba <tabba@google.com>,
Sean Christopherson <seanjc@google.com>,
Shivank Garg <shivankg@amd.com>,
Ackerley Tng <ackerleytng@google.com>,
Gregory Price <gourry@gourry.net>,
Andrew Morton <akpm@linux-foundation.org>,
Namjae Jeon <linkinjeon@kernel.org>,
Lorenzo Stoakes <ljs@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Ira Weiny <iweiny@kernel.org>,
Pasha Tatashin <pasha.tatashin@soleen.com>,
Haren Myneni <haren@linux.ibm.com>,
Pratyush Yadav <pratyush@kernel.org>,
Giovanni Cabiddu <giovanni.cabiddu@intel.com>,
Jiri Slaby <jirislaby@kernel.org>,
Ethan Nelson-Moore <enelsonmoore@gmail.com>,
Gabriel Whigham <gabewhigham@gmail.com>,
Aravind Ramesh <arramesh@micron.com>,
Ajay Joshi <ajayjoshi@micron.com>,
"venkataravis@micron.com" <venkataravis@micron.com>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"nvdimm@lists.linux.dev" <nvdimm@lists.linux.dev>,
"linux-cxl@vger.kernel.org" <linux-cxl@vger.kernel.org>,
"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>,
"fuse-devel@lists.linux.dev" <fuse-devel@lists.linux.dev>
Subject: Re: [PATCH v13 00/12] famfs: the Fabric-Attached Memory File System (standalone)
Date: Fri, 21 Aug 2026 17:19:16 -0700 [thread overview]
Message-ID: <20260822001916.GD6047@frogsfrogsfrogs> (raw)
In-Reply-To: <1f218de3db5bb7a89e56bb100fd4a4b87e5dc536.camel@kernel.org>
On Thu, Aug 20, 2026 at 08:37:13AM -0400, Jeff Layton wrote:
> On Mon, 2026-08-10 at 20:23 +0000, John Groves wrote:
> > From: John Groves <john@groves.net>
> >
> > This is v13 of famfs, as a standalone file system. v12 is at [7].
> >
> > Most of this cover letter repeats v12. If you have read it, skip to "Changes
> > since v12" below and to the per-patch changelogs under the "---" line of each
> > patch. The history goes back to 2023, and is briefly covered in the v12
> > cover.
> >
> > The most important thing to know about famfs is that it CANNOT be used as a
> > general purpose file system. It is for enabling file-based byte-level access
> > (including direct mmap) to very large (e.g. 100TB) shared/disaggregated
> > memory appliances - which have become available during this long process,
> > and which are in need of Linux support.
> >
> > So famfs cannot be used by anybody who doesn't know why they need it. Making
> > famfs standalone means it can't affect users who don't use it. Micron, as
> > well as other memory companies, need it, and do not intend to abandon it -
> > but imagine if we did: fs/famfs/ should be removed if the memory companies
> > can't be bothered to maintain it.
> >
> > This code base has been in active CI and used globally by early adopters and
> > testers of disaggregated memory since 2024. I believe it is solid.
> >
> > Why standalone (short version)
> >
> > famfs was introduced at LPC 2023 and LSFMM 2024 [1] as a standalone file
> > system, then spent close to a year being ported to fuse/libfuse. After
> > maintaining famfs in both forms, I have concluded it makes more sense as a
> > standalone file system: fuse adds complexity to famfs (more complex, less
> > adaptable, less performant - and famfs files are memory, so access must run
> > at memory speed), while famfs adds complexity to fuse that is unlikely to see
> > constructive re-use. The full history and argument are in the v12 cover
> > letter [7].
> >
> > Changes since v12
> > -----------------
> >
> > - Patch 01 split, per Alison Schofield: the removal of the now-unused
> > dax_dev_get() export is a standalone DAX cleanup that goes via the DAX tree
> > and is posted separately [8]. Patch 01 of this series is reduced to adding
> > the non-allocating lookup helper dax_dev_find().
> >
> > - Darrick Wong's review comments are addressed across the series: the
> > kill_*_super() rationale in the mount patch, the page_mkwrite/pfn_mkwrite
> > write-fault comment, dropping the operation flags from iomap->flags in the
> > resolver, and more.
> >
> > - A number of findings from the Sashiko review bot are fixed:
> > * mprotect() could bypass the FAMFS_OPT_WRITE gate (the check looked at
> > VM_WRITE only, not VM_MAYWRITE);
> > * rename() over an existing target bypassed the FAMFS_OPT_UNLINK /
> > FAMFS_OPT_RMDIR policy that unlink()/rmdir() enforce;
> > * splice()/sendfile() returned zeroes on these DAX files
> > (filemap_splice_read -> copy_splice_read);
> > * create/mkdir/mknod updated the child inode's timestamps instead of the
> > parent directory's;
> > * .map_pages (filemap_map_pages) was a no-op on DAX and is removed;
> > * mount-parameter and module-namespace hygiene (reject unknown mount
> > options; prefix the non-static lookup_daxdev()).
> > A few Sashiko findings were considered and declined with rationale - for
> > example generic_write_sync(), which is inert for a filesystem with no page
> > cache, no writeback, and a noop_fsync ->fsync. Those are noted under the
> > relevant patch.
> >
> > - famfs now accepts 4 KiB extent alignment in addition to 2 MiB: the
> > allocation unit may be 4 KiB or 2 MiB. 2 MiB-aligned extents still map with
> > huge pages; 4 KiB-granular extents map with PTEs (the DAX fault path already
> > falls back PMD -> PTE).
> >
> > - MAP_SYNC is now supported (FOP_MMAP_SYNC). famfs fmap metadata is immutable
> > after MAP_CREATE, so the MAP_SYNC durability guarantee is met with no
> > metadata sync required.
> >
> > - famfs is explicitly 64-bit only now (depends on 64BIT); it targets
> > CXL/fabric-attached memory, which does not exist on 32-bit systems.
> >
> > Famfs Overview
> >
> > Famfs exposes sharable disaggregated memory as a file system. Famfs consumes
> > shared memory from [usually shared memory] dax devices, and provides
> > memory-mappable files that map directly to the memory - no page cache
> > involvement. Famfs differs from conventional file systems in fs-dax mode,
> > in that it handles in-memory metadata in a sharable way (which begins with
> > never caching dirty shared metadata). So a famfs file system can be mounted
> > from multiple nodes, provided they have access to the memory.
> >
> > The key performance requirement is that famfs must resolve mapping faults
> > with minimal overhead. This is achieved by fully caching the file-to-devdax
> > metadata for all active files.
> >
> > Famfs remains the first fs-dax file system that is backed by devdax rather
> > than pmem in fs-dax mode (hence the need for the new dax mode).
> >
> > Famfs depends on the 'fsdev' dax mode which landed in 7.1 - it will only run
> > with an fsdev-mode (aka famfs-mode) daxdev as its backing device(s).
> >
> > The famfs user space can be found at [6].
> >
> > [1] https://lwn.net/Articles/983105/ (Famfs at LSFMM 2024)
> > [2] https://lwn.net/Articles/1020170/ (Famfs at LSFMM 2025, with patch link)
> > [3] https://lwn.net/Articles/1068686/ (LWN coverage of the patch thread)
> > [4] https://lwn.net/Articles/1082687/ (Famfs at LSFMM 2026)
> > [5] https://lore.kernel.org/linux-fsdevel/0100019f7d9fbe81-6cb16662-2522-47ea-a152-fab0ee3d9b35-000000@email.amazonses.com/#b
> > [6] https://famfs.org
> > [7] https://lore.kernel.org/linux-fsdevel/20260806053409.GL3560084@frogsfrogsfrogs/T/#t (v12)
> > [8] https://lore.kernel.org/linux-cxl/0100019fd478eb93-a6bd48e4-b5f1-4871-93d4-582802956e6c-000000@email.amazonses.com/T/#u (Partial dax patch)
> >
> >
> > John Groves (12):
> > dax: replace exported dax_dev_get() with non-allocating dax_dev_find()
> > famfs: Module operations, fs_context, and mount
> > famfs: Add daxdev table and dax notify_failure support
> > famfs: Introduce inode_operations and super_operations
> > famfs: Introduce file_operations read/write
> > famfs: Introduce mmap and VM fault handling
> > famfs: MAP_CREATE ioctl and fmap ingest (ABI 44)
> > famfs: iomap_begin and file-to-dax offset resolution
> > famfs: Register secondary daxdevs by path (FAMFSIOC_DAXDEV_OPEN)
> > famfs: Add runtime operation-permission (opts) framework
> > famfs: Report device capacity via statfs so df works
> > famfs: Add documentation
> >
> > Documentation/filesystems/famfs.rst | 142 +++
> > Documentation/filesystems/index.rst | 1 +
> > .../userspace-api/ioctl/ioctl-number.rst | 1 +
> > MAINTAINERS | 8 +
> > drivers/dax/fsdev.c | 19 +
> > drivers/dax/super.c | 38 +-
> > fs/Kconfig | 2 +
> > fs/Makefile | 1 +
> > fs/famfs/Kconfig | 12 +
> > fs/famfs/Makefile | 5 +
> > fs/famfs/famfs_file.c | 1007 +++++++++++++++++
> > fs/famfs/famfs_inode.c | 869 ++++++++++++++
> > fs/famfs/famfs_internal.h | 162 +++
> > fs/namei.c | 1 +
> > fs/super.c | 7 +
> > include/linux/dax.h | 7 +-
> > include/linux/fs.h | 1 +
> > include/uapi/linux/famfs_ioctl.h | 160 +++
> > include/uapi/linux/magic.h | 1 +
> > 19 files changed, 2441 insertions(+), 3 deletions(-)
> > create mode 100644 Documentation/filesystems/famfs.rst
> > create mode 100644 fs/famfs/Kconfig
> > create mode 100644 fs/famfs/Makefile
> > create mode 100644 fs/famfs/famfs_file.c
> > create mode 100644 fs/famfs/famfs_inode.c
> > create mode 100644 fs/famfs/famfs_internal.h
> > create mode 100644 include/uapi/linux/famfs_ioctl.h
> >
> > --
> > 2.53.0
> >
>
> I looked over the series and while I don't have the greatest grasp of
> DAX/CXL, the fs bits all look fairly self-contained and reasonable to
> me. The changes outside of fs/famfs are extremely minimal, so I'm not
> worried much about this breaking anything unrelated.
>
> At this point, I think just taking this as a standalone fs is the right
> thing to do. This already has field deployments, so it's fairly well
> tested. If it turns out that the FUSE approach becomes more palatable
> later, we can just move to deprecate the standalone version then.
>
> You and Richard discussed some (minimal) changes in patch #7. Assuming
> you resolve those, you can add:
>
> Reviewed-by: Jeff Layton <jlayton@kernel.org>
>
> (but figure that's mostly for the fs and not mm parts).
>
Except for the two patch that I complained about this time, you can add
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
to the rest of the patches.
> It's a little late for v7.3 given that the merge window is open now.
> Should we aim to get this into v7.4? That would give this a full cycle
> in linux-next too.
I think we should aim to merge either this famfs or the fuse famfs for
7.4. No more delaying, this has been dragging on for too long.
--D
prev parent reply other threads:[~2026-08-22 0:19 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20260810202325.96202-1-john@jagalactic.com>
2026-08-10 20:23 ` [PATCH v13 00/12] famfs: the Fabric-Attached Memory File System (standalone) John Groves
2026-08-10 20:24 ` [PATCH v13 01/12] dax: replace exported dax_dev_get() with non-allocating dax_dev_find() John Groves
2026-08-10 20:24 ` [PATCH v13 02/12] famfs: Module operations, fs_context, and mount John Groves
2026-08-10 20:24 ` [PATCH v13 03/12] famfs: Add daxdev table and dax notify_failure support John Groves
2026-08-10 20:24 ` [PATCH v13 04/12] famfs: Introduce inode_operations and super_operations John Groves
2026-08-10 20:24 ` [PATCH v13 05/12] famfs: Introduce file_operations read/write John Groves
2026-08-10 20:25 ` [PATCH v13 06/12] famfs: Introduce mmap and VM fault handling John Groves
2026-08-10 20:25 ` [PATCH v13 07/12] famfs: MAP_CREATE ioctl and fmap ingest (ABI 44) John Groves
2026-08-11 8:03 ` Richard Cheng
2026-08-11 22:17 ` John Groves
2026-08-22 0:17 ` Darrick J. Wong
2026-08-10 20:25 ` [PATCH v13 08/12] famfs: iomap_begin and file-to-dax offset resolution John Groves
2026-08-10 20:25 ` [PATCH v13 09/12] famfs: Register secondary daxdevs by path (FAMFSIOC_DAXDEV_OPEN) John Groves
2026-08-10 20:25 ` [PATCH v13 10/12] famfs: Add runtime operation-permission (opts) framework John Groves
2026-08-22 0:07 ` Darrick J. Wong
2026-08-10 20:25 ` [PATCH v13 11/12] famfs: Report device capacity via statfs so df works John Groves
2026-08-10 20:26 ` [PATCH v13 12/12] famfs: Add documentation John Groves
2026-08-20 12:37 ` [PATCH v13 00/12] famfs: the Fabric-Attached Memory File System (standalone) Jeff Layton
2026-08-22 0:19 ` Darrick J. Wong [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260822001916.GD6047@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=John@groves.net \
--cc=ackerleytng@google.com \
--cc=ajayjoshi@micron.com \
--cc=akpm@linux-foundation.org \
--cc=alison.schofield@intel.com \
--cc=amir73il@gmail.com \
--cc=arramesh@micron.com \
--cc=bagasdotme@gmail.com \
--cc=brauner@kernel.org \
--cc=bschubert@ddn.com \
--cc=chenlinxuan@uniontech.com \
--cc=corbet@lwn.net \
--cc=dave.jiang@intel.com \
--cc=david@kernel.org \
--cc=djbw@kernel.org \
--cc=enelsonmoore@gmail.com \
--cc=fuse-devel@lists.linux.dev \
--cc=gabewhigham@gmail.com \
--cc=giovanni.cabiddu@intel.com \
--cc=gourry@gourry.net \
--cc=gregkh@linuxfoundation.org \
--cc=haren@linux.ibm.com \
--cc=iweiny@kernel.org \
--cc=jack@suse.cz \
--cc=jake@lwn.net \
--cc=james.morse@arm.com \
--cc=jgroves@micron.com \
--cc=jic23@kernel.org \
--cc=jirislaby@kernel.org \
--cc=jlayton@kernel.org \
--cc=joannelkoong@gmail.com \
--cc=john@jagalactic.com \
--cc=josef@toxicpanda.com \
--cc=linkinjeon@kernel.org \
--cc=linux-cxl@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ljs@kernel.org \
--cc=miklos@szeredi.hu \
--cc=nvdimm@lists.linux.dev \
--cc=pasha.tatashin@soleen.com \
--cc=pratyush@kernel.org \
--cc=rdunlap@infradead.org \
--cc=seanjc@google.com \
--cc=shajnocz@redhat.com \
--cc=shivankg@amd.com \
--cc=skhan@linuxfoundation.org \
--cc=tabba@google.com \
--cc=venkataravis@micron.com \
--cc=viro@zeniv.linux.org.uk \
--cc=vishal.l.verma@intel.com \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).