]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
fs: rearrange general fastpath check now that O_CREAT uses it
authorChristian Brauner <brauner@kernel.org>
Thu, 8 Aug 2024 09:16:42 +0000 (11:16 +0200)
committerChristian Brauner <brauner@kernel.org>
Fri, 30 Aug 2024 06:22:35 +0000 (08:22 +0200)
If we find a positive dentry we can now simply try and open it. All
prelimiary checks are already done with or without O_CREAT.

Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/namei.c

index 96c79dec718496ff1d5a5fb36d8060f7632eafd9..2699601bf8e9e75e62f9418aaa2af8e5416ed71a 100644 (file)
@@ -3666,26 +3666,17 @@ static const char *open_last_lookups(struct nameidata *nd,
        if (IS_ERR(dentry))
                return ERR_CAST(dentry);
 
-       if (!(open_flag & O_CREAT)) {
-               if (likely(dentry))
-                       goto finish_lookup;
+       if (likely(dentry))
+               goto finish_lookup;
 
+       if (!(open_flag & O_CREAT)) {
                if (WARN_ON_ONCE(nd->flags & LOOKUP_RCU))
                        return ERR_PTR(-ECHILD);
        } else {
                if (nd->flags & LOOKUP_RCU) {
-                       bool unlazied;
-
-                       /* can stay in rcuwalk if not auditing */
-                       if (dentry)
-                               goto finish_lookup;
-                       unlazied = dentry ? try_to_unlazy_next(nd, dentry) :
-                                           try_to_unlazy(nd);
-                       if (!unlazied)
+                       if (!try_to_unlazy(nd))
                                return ERR_PTR(-ECHILD);
                }
-               if (dentry)
-                       goto finish_lookup;
        }
 
        if (open_flag & (O_CREAT | O_TRUNC | O_WRONLY | O_RDWR)) {