]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
simplify nfs_atomic_open_v23()
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 12 Sep 2025 15:52:41 +0000 (11:52 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 17 Sep 2025 03:59:38 +0000 (23:59 -0400)
1) finish_no_open() takes ERR_PTR() as dentry now.
2) caller of ->atomic_open() will call d_lookup_done() itself, no
need to do it here.

Reviewed-by: NeilBrown <neil@brown.name>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/nfs/dir.c

index d812179239362bccae5d99cd5ad0417088822422..c8dd1d0b8d85003d86f5018f4c6db1bdd56b46f0 100644 (file)
@@ -2260,7 +2260,7 @@ int nfs_atomic_open_v23(struct inode *dir, struct dentry *dentry,
                        struct file *file, unsigned int open_flags,
                        umode_t mode)
 {
-
+       struct dentry *res = NULL;
        /* Same as look+open from lookup_open(), but with different O_TRUNC
         * handling.
         */
@@ -2275,21 +2275,15 @@ int nfs_atomic_open_v23(struct inode *dir, struct dentry *dentry,
                if (error)
                        return error;
                return finish_open(file, dentry, NULL);
-       } else if (d_in_lookup(dentry)) {
+       }
+       if (d_in_lookup(dentry)) {
                /* The only flags nfs_lookup considers are
                 * LOOKUP_EXCL and LOOKUP_RENAME_TARGET, and
                 * we want those to be zero so the lookup isn't skipped.
                 */
-               struct dentry *res = nfs_lookup(dir, dentry, 0);
-
-               d_lookup_done(dentry);
-               if (unlikely(res)) {
-                       if (IS_ERR(res))
-                               return PTR_ERR(res);
-                       return finish_no_open(file, res);
-               }
+               res = nfs_lookup(dir, dentry, 0);
        }
-       return finish_no_open(file, NULL);
+       return finish_no_open(file, res);
 
 }
 EXPORT_SYMBOL_GPL(nfs_atomic_open_v23);