fs: tidy up do_sys_openat2() with likely/unlikely
authorMateusz Guzik <mjguzik@gmail.com>
Thu, 20 Mar 2025 09:23:31 +0000 (10:23 +0100)
committerChristian Brauner <brauner@kernel.org>
Thu, 20 Mar 2025 09:41:59 +0000 (10:41 +0100)
Otherwise gcc 13 generates conditional forward jumps (aka branch
mispredict by default) for build_open_flags() being succesfull.

Signed-off-by: Mateusz Guzik <mjguzik@gmail.com>
Link: https://lore.kernel.org/r/20250320092331.1921700-1-mjguzik@gmail.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/open.c

index 634fdca6501aa39d32eb49636b4ab93fdee02b3b..df140788077bf826a991547c8cfb07d512d373cb 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -1412,18 +1412,19 @@ static int do_sys_openat2(int dfd, const char __user *filename,
                          struct open_how *how)
 {
        struct open_flags op;
-       int fd = build_open_flags(how, &op);
        struct filename *tmp;
+       int err, fd;
 
-       if (fd)
-               return fd;
+       err = build_open_flags(how, &op);
+       if (unlikely(err))
+               return err;
 
        tmp = getname(filename);
        if (IS_ERR(tmp))
                return PTR_ERR(tmp);
 
        fd = get_unused_fd_flags(how->flags);
-       if (fd >= 0) {
+       if (likely(fd >= 0)) {
                struct file *f = do_filp_open(dfd, tmp, &op);
                if (IS_ERR(f)) {
                        put_unused_fd(fd);