Re: [PATCH v4 10/17] vfs: make vfs_create break delegations on parent directory

Jeff Layton <[email protected]>
Newsgroups org.kernel.vger.ecryptfs,dev.linux.lists.netfs,org.kernel.vger.linux-cifs,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-nfs,org.kernel.vger.linux-unionfs,org.kernel.vger.linux-xfs,org.kernel.vger.netdev
Message-ID <[email protected]>
On Tue, 2025-11-04 at 17:38 +0000, Simon Horman wrote:
> On Mon, Nov 03, 2025 at 07:52:38AM -0500, Jeff Layton wrote:
> > In order to add directory delegation support, we need to break
> > delegations on the parent whenever there is going to be a change in the
> > directory.
> > 
> > Add a delegated_inode parameter to struct createdata. Most callers just
> > leave that as a NULL pointer, but do_mknodat() is changed to wait for a
> > delegation break if there is one.
> > 
> > Signed-off-by: Jeff Layton <[email protected]>
> > ---
> >  fs/namei.c         | 26 +++++++++++++++++---------
> >  include/linux/fs.h |  2 +-
> >  2 files changed, 18 insertions(+), 10 deletions(-)
> > 
> > diff --git a/fs/namei.c b/fs/namei.c
> 
> ...
> 
> > @@ -4359,6 +4362,8 @@ static int may_mknod(umode_t mode)
> >  static int do_mknodat(int dfd, struct filename *name, umode_t mode,
> >  		unsigned int dev)
> >  {
> > +	struct delegated_inode delegated_inode = { };
> > +	struct createdata cargs = { };
> >  	struct mnt_idmap *idmap;
> >  	struct dentry *dentry;
> >  	struct path path;
> > @@ -4383,18 +4388,16 @@ static int do_mknodat(int dfd, struct filename *name, umode_t mode,
> >  	switch (mode & S_IFMT) {
> >  		case 0:
> >  		case S_IFREG:
> > -		{
> > -			struct createdata args = { .idmap = idmap,
> > -						   .dir = path.dentry->d_inode,
> > -						   .dentry = dentry,
> > -						   .mode = mode,
> > -						   .excl = true };
> > -
> > -			error = vfs_create(&args);
> > +			cargs.idmap = idmap,
> > +			cargs.dir = path.dentry->d_inode,
> > +			cargs.dentry = dentry,
> > +			cargs.delegated_inode = &delegated_inode;
> > +			cargs.mode = mode,
> > +			cargs.excl = true,
> 
> Hi Jeff,
> 
> I don't think it makes any difference to the generated code.
> But I think it would be more intuitive to use ';' rather than ','
> at the end of the lines immediately above.
> 

Definitely. Will fix.

> > +			error = vfs_create(&cargs);
> >  			if (!error)
> >  				security_path_post_mknod(idmap, dentry);
> >  			break;
> > -		}
> >  		case S_IFCHR: case S_IFBLK:
> >  			error = vfs_mknod(idmap, path.dentry->d_inode,
> >  					  dentry, mode, new_decode_dev(dev));
> 
> ...

Thanks!
-- 
Jeff Layton <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.