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]>