]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
vfs: move create error && negative dentry case in lookup_open() up
authorJori Koolstra <jkoolstra@xs4all.nl>
Fri, 10 Jul 2026 16:42:31 +0000 (18:42 +0200)
committerChristian Brauner <brauner@kernel.org>
Thu, 30 Jul 2026 10:16:55 +0000 (12:16 +0200)
O_CREAT is stripped when create_error is set in lookup_open(), so when
lookup does not return an inode, the case

if (!dentry->d_inode && (open_flag & O_CREAT))

is always skipped. We can get rid of this cognitive step by handling the
error case first.

Reviewed-by: NeilBrown <neil@brown.name>
Signed-off-by: Jori Koolstra <jkoolstra@xs4all.nl>
Link: https://patch.msgid.link/20260710164233.827744-2-jkoolstra@xs4all.nl
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
fs/namei.c

index 3ca34388eda3ee94fc1d6c895118f07b647c3181..62f1b8600ec18e9c1b1f95b4782f34314aed3eee 100644 (file)
@@ -4513,6 +4513,11 @@ retry:
                }
        }
 
+       if (unlikely(create_error) && !dentry->d_inode) {
+               error = create_error;
+               goto out_dput;
+       }
+
        /* Negative dentry, just create the file */
        if (!dentry->d_inode && (open_flag & O_CREAT)) {
                /* but break the directory lease first! */
@@ -4532,10 +4537,6 @@ retry:
                if (error)
                        goto out_dput;
        }
-       if (unlikely(create_error) && !dentry->d_inode) {
-               error = create_error;
-               goto out_dput;
-       }
 out:
        if (!IS_ERR(dentry)) {
                if (file->f_mode & FMODE_CREATED)