]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
nfsd_mkdir(): switch to simple_start_creating()
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 2 Jul 2025 07:22:12 +0000 (03:22 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 17 Sep 2025 23:40:40 +0000 (19:40 -0400)
... and fold __nfsd_mkdir() into it.

Reviewed-by: NeilBrown <neil@brown.name>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/nfsd/nfsctl.c

index 282b961d87883cebd7533bfa51897f078719874e..6d60bc48f96e6a7a33d0aac1b41901b533ba4403 100644 (file)
@@ -1128,43 +1128,30 @@ static struct inode *nfsd_get_inode(struct super_block *sb, umode_t mode)
        return inode;
 }
 
-static int __nfsd_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode, struct nfsdfs_client *ncl)
+static struct dentry *nfsd_mkdir(struct dentry *parent, struct nfsdfs_client *ncl, char *name)
 {
+       struct inode *dir = parent->d_inode;
+       struct dentry *dentry;
        struct inode *inode;
 
-       inode = nfsd_get_inode(dir->i_sb, mode);
+       inode = nfsd_get_inode(parent->d_sb, S_IFDIR | 0600);
        if (!inode)
-               return -ENOMEM;
+               return ERR_PTR(-ENOMEM);
+
+       dentry = simple_start_creating(parent, name);
+       if (IS_ERR(dentry)) {
+               iput(inode);
+               return dentry;
+       }
        if (ncl) {
                inode->i_private = ncl;
                kref_get(&ncl->cl_ref);
        }
-       d_add(dentry, inode);
+       d_instantiate(dentry, inode);
        inc_nlink(dir);
        fsnotify_mkdir(dir, dentry);
-       return 0;
-}
-
-static struct dentry *nfsd_mkdir(struct dentry *parent, struct nfsdfs_client *ncl, char *name)
-{
-       struct inode *dir = parent->d_inode;
-       struct dentry *dentry;
-       int ret = -ENOMEM;
-
-       inode_lock(dir);
-       dentry = d_alloc_name(parent, name);
-       if (!dentry)
-               goto out_err;
-       ret = __nfsd_mkdir(d_inode(parent), dentry, S_IFDIR | 0600, ncl);
-       if (ret)
-               goto out_err;
-out:
        inode_unlock(dir);
        return dentry;
-out_err:
-       dput(dentry);
-       dentry = ERR_PTR(ret);
-       goto out;
 }
 
 #if IS_ENABLED(CONFIG_SUNRPC_GSS)