linux-cxl.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

      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).