All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Groves <John@groves.net>
To: "Darrick J. Wong" <djwong@kernel.org>
Cc: John Groves <john@jagalactic.com>,
	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>,
	 Jeff Layton <jlayton@kernel.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 V12 09/12] famfs: Register secondary daxdevs by path (FAMFSIOC_DAXDEV_OPEN)
Date: Thu, 6 Aug 2026 17:22:46 -0500	[thread overview]
Message-ID: <anUIQfuDqFADAIrf@groves.net> (raw)
In-Reply-To: <20260806052904.GI3560084@frogsfrogsfrogs>

On 26/08/05 10:29PM, Darrick J. Wong wrote:
> On Mon, Aug 03, 2026 at 02:29:47AM +0000, John Groves wrote:
> > From: John Groves <John@Groves.net>
> > 
> > Famfs file maps (fmaps) may reference multiple daxdevs. Before passing
> > an fmap that references a new daxdev, the daxdev is pushed into the
> > kernel via FAMFSIOC_DAXDEV_OPEN). This adds daxdevs to daxdev_table for
> > index-based resolution from famfs extents to daxdevs.
> > 
> > Signed-off-by: John Groves <john@groves.net>
> > ---
> >  fs/famfs/famfs_file.c            | 74 ++++++++++++++++++++++++++++++++
> >  include/uapi/linux/famfs_ioctl.h | 24 +++++++++++
> >  2 files changed, 98 insertions(+)
> > 
> > diff --git a/fs/famfs/famfs_file.c b/fs/famfs/famfs_file.c
> > index e7f271ce6d03..e11a55ecf8d7 100644
> > --- a/fs/famfs/famfs_file.c
> > +++ b/fs/famfs/famfs_file.c
> > @@ -287,6 +287,76 @@ famfs_file_init_dax(struct file *file, void __user *arg)
> >  	return rc;
> >  }
> >  
> > +/**
> > + * famfs_daxdev_open() - FAMFSIOC_DAXDEV_OPEN ioctl handler
> > + * @file: any file in the famfs mount (the table is per-superblock)
> > + * @arg:  ptr to struct famfs_ioc_daxdev in user space
> > + *
> > + * Register a devdax device (identified by path) into the mount's daxdev table
> > + * at the caller-specified index, so files whose extents reference that index
> > + * can be mapped. The path is resolved by lookup_daxdev() - the same helper the
> > + * mount uses for the primary daxdev - so every slot is resolved identically.
> > + * Registering exposes raw device memory, so it requires CAP_SYS_RAWIO.
> > + */
> > +static int
> > +famfs_daxdev_open(struct file *file, void __user *arg)
> > +{
> > +	struct super_block *sb = file_inode(file)->i_sb;
> > +	struct famfs_fs_info *fsi = sb->s_fs_info;
> > +	struct famfs_ioc_daxdev dd;
> > +	dev_t devno;
> > +	char *path;
> > +	int rc;
> > +
> > +	if (!capable(CAP_SYS_RAWIO))
> > +		return -EPERM;
> > +
> > +	if (copy_from_user(&dd, arg, sizeof(dd)))
> > +		return -EFAULT;
> > +
> > +	/* @flags is reserved; reject non-zero so it stays available */
> > +	if (dd.flags)
> > +		return -EINVAL;
> > +
> > +	/*
> > +	 * If this daxdev index is already populated there is nothing to do.
> > +	 * The index is cluster-invariant, so a valid slot already names this
> > +	 * device; skip the path resolution entirely. install_daxdev() rechecks
> > +	 * ->valid under the write lock, so this is purely an optimization.
> > +	 */
> > +	scoped_guard(rwsem_read, &fsi->devlist_sem) {
> > +		if (dd.daxdev_index >= fsi->dax_devlist->nslots)
> > +			return -EINVAL;
> > +		if (fsi->dax_devlist->devlist[dd.daxdev_index].valid)
> > +			return 0;
> > +	}
> > +
> > +	if (dd.daxdev_path_len == 0 || dd.daxdev_path_len >= PATH_MAX)
> > +		return -EINVAL;
> > +
> > +	/* +1 so the terminating NUL is included within the bound */
> > +	path = strndup_user((const char __user *)(uintptr_t)dd.daxdev_path,
> > +			    dd.daxdev_path_len + 1);
> > +	if (IS_ERR(path))
> > +		return PTR_ERR(path);
> > +
> > +	rc = lookup_daxdev(path, &devno);
> > +	if (rc)
> > +		goto out;
> > +
> > +	/*
> > +	 * The daxdev table is allocated at mount time (for the slot-0 primary),
> > +	 * so it is always present here; no need to allocate it.
> > +	 */
> > +	rc = famfs_install_daxdev(fsi, sb, dd.daxdev_index, devno, path);
> > +	if (rc)
> > +		pr_debug("%s: failed to install daxdev index %llu (%s)\n",
> > +		       __func__, dd.daxdev_index, path);
> > +out:
> > +	kfree(path);
> > +	return rc;
> > +}
> > +
> >  /**
> >   * famfs_file_ioctl() - Top-level famfs file ioctl handler
> >   * @file: the file
> > @@ -308,6 +378,10 @@ famfs_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
> >  		rc = 0;
> >  		break;
> >  
> > +	case FAMFSIOC_DAXDEV_OPEN:
> > +		rc = famfs_daxdev_open(file, (void __user *)arg);
> > +		break;
> > +
> >  	case FAMFSIOC_MAP_CREATE:
> >  		rc = famfs_file_init_dax(file, (void __user *)arg);
> >  		break;
> > diff --git a/include/uapi/linux/famfs_ioctl.h b/include/uapi/linux/famfs_ioctl.h
> > index b4eb373c1ade..751d8b033c2e 100644
> > --- a/include/uapi/linux/famfs_ioctl.h
> > +++ b/include/uapi/linux/famfs_ioctl.h
> > @@ -77,6 +77,29 @@ struct famfs_ioc_fmap_header {
> >  	__u64 reserved1;
> >  };
> >  
> > +/**
> > + * struct famfs_ioc_daxdev - register an additional backing daxdev by path
> > + * @daxdev_index:    the (cluster-invariant) index this daxdev occupies in
> > + *                   extent dev_index fields. Index 0 is the mount-time primary.
> > + * @daxdev_path:     userspace pointer to the devdax device path (e.g.
> > + *                   "/dev/dax0.0"); resolved in the kernel the same way the
> > + *                   mount primary is.
> > + * @daxdev_path_len: length of the path string, not counting the NUL.
> > + * @flags:           reserved; must be zero.
> > + *
> > + * Standalone famfs registers every daxdev by path: the mount primary comes in
> > + * as the mount device name, and slots 1..n come in here. (This deliberately
> > + * differs from fuse's fd-based FUSE_DEV_IOC_DAXDEV_OPEN; each side is uniform
> > + * within itself.) Passing the path by pointer keeps the struct fixed-size, so
> > + * longer paths never require an ABI change.
> > + */
> > +struct famfs_ioc_daxdev {
> > +	__u64 daxdev_index;
> > +	__u64 daxdev_path;
> > +	__u32 daxdev_path_len;
> 
> Can't we just pass an open fd to a dax device and have it use that
> rather than doing its own path operations?
> 
> --D

Could do, but then there would be two ways to "open" a daxdev, since the primary
is passed by path via the mount command or call.

If anybody thinks that's superior enough to do it 2 different ways, let me know.
Otherwise I'll leave it.

Thanks!
John

<snip>


  reply	other threads:[~2026-08-06 22:23 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20260803022730.75731-1-john@jagalactic.com>
2026-08-03  2:27 ` [PATCH V12 00/12] famfs: the Fabric-Attached Memory File System (standalone) John Groves
2026-08-03  2:28   ` [PATCH V12 01/12] dax: replace exported dax_dev_get() with non-allocating dax_dev_find() John Groves
2026-08-03  2:43     ` sashiko-bot
2026-08-03 19:13     ` Alison Schofield
2026-08-05 20:21       ` John Groves
2026-08-03  2:28   ` [PATCH V12 02/12] famfs: Module operations, fs_context, and mount John Groves
2026-08-03  2:49     ` sashiko-bot
2026-08-06  4:37     ` Darrick J. Wong
2026-08-06 13:22       ` John Groves
2026-08-03  2:28   ` [PATCH V12 03/12] famfs: Add daxdev table and dax notify_failure support John Groves
2026-08-03  2:45     ` sashiko-bot
2026-08-06  5:05     ` Darrick J. Wong
2026-08-06 13:36       ` John Groves
2026-08-03  2:28   ` [PATCH V12 04/12] famfs: Introduce inode_operations and super_operations John Groves
2026-08-03  2:42     ` sashiko-bot
2026-08-06  5:12     ` Darrick J. Wong
2026-08-06 16:31       ` John Groves
2026-08-03  2:29   ` [PATCH V12 05/12] famfs: Introduce file_operations read/write John Groves
2026-08-03  2:42     ` sashiko-bot
2026-08-06  5:14     ` Darrick J. Wong
2026-08-06 20:03       ` John Groves
2026-08-03  2:29   ` [PATCH V12 06/12] famfs: Introduce mmap and VM fault handling John Groves
2026-08-03  2:46     ` sashiko-bot
2026-08-06  5:16     ` Darrick J. Wong
2026-08-06 20:40       ` John Groves
2026-08-03  2:29   ` [PATCH V12 07/12] famfs: MAP_CREATE ioctl and fmap ingest (ABI 44) John Groves
2026-08-03  2:42     ` sashiko-bot
2026-08-06  5:24     ` Darrick J. Wong
2026-08-06 20:53       ` John Groves
2026-08-07 22:17         ` John Groves
2026-08-03  2:29   ` [PATCH V12 08/12] famfs: iomap_begin and file-to-dax offset resolution John Groves
2026-08-03  2:44     ` sashiko-bot
2026-08-06  5:28     ` Darrick J. Wong
2026-08-06 22:14       ` John Groves
2026-08-03  2:29   ` [PATCH V12 09/12] famfs: Register secondary daxdevs by path (FAMFSIOC_DAXDEV_OPEN) John Groves
2026-08-03  2:42     ` sashiko-bot
2026-08-06  5:29     ` Darrick J. Wong
2026-08-06 22:22       ` John Groves [this message]
2026-08-03  2:29   ` [PATCH V12 10/12] famfs: Add runtime operation-permission (opts) framework John Groves
2026-08-03  2:42     ` sashiko-bot
2026-08-06  5:31     ` Darrick J. Wong
2026-08-06 22:30       ` John Groves
2026-08-03  2:30   ` [PATCH V12 11/12] famfs: Report device capacity via statfs so df works John Groves
2026-08-03  2:58     ` sashiko-bot
2026-08-06  5:33     ` Darrick J. Wong
2026-08-07 13:47       ` John Groves
2026-08-03  2:30   ` [PATCH V12 12/12] famfs: Add documentation John Groves
2026-08-06  5:38     ` Darrick J. Wong
2026-08-07 15:05       ` John Groves
2026-08-03  8:52   ` [PATCH V12 00/12] famfs: the Fabric-Attached Memory File System (standalone) Amir Goldstein
2026-08-06  5:19     ` Matthew Wilcox
2026-08-06  5:34       ` Darrick J. Wong

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=anUIQfuDqFADAIrf@groves.net \
    --to=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=djwong@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.