Merge patch series "fs: sort out cosmetic differences between stat funcs and add predicts"

Predict fastpaths in stat and during fdput().

* patches from https://lore.kernel.org/20250406235806.1637000-1-mjguzik@gmail.com:
  fs: predict not having to do anything in fdput()
  fs: sort out cosmetic differences between stat funcs and add predicts

Link: https://lore.kernel.org/20250406235806.1637000-1-mjguzik@gmail.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
Christian Brauner
2025-04-08 10:28:10 +02:00
2 changed files with 21 additions and 16 deletions

View File

@@ -241,7 +241,7 @@ int vfs_getattr(const struct path *path, struct kstat *stat,
int retval;
retval = security_inode_getattr(path);
if (retval)
if (unlikely(retval))
return retval;
return vfs_getattr_nosec(path, stat, request_mask, query_flags);
}
@@ -421,7 +421,7 @@ SYSCALL_DEFINE2(stat, const char __user *, filename,
int error;
error = vfs_stat(filename, &stat);
if (error)
if (unlikely(error))
return error;
return cp_old_stat(&stat, statbuf);
@@ -434,7 +434,7 @@ SYSCALL_DEFINE2(lstat, const char __user *, filename,
int error;
error = vfs_lstat(filename, &stat);
if (error)
if (unlikely(error))
return error;
return cp_old_stat(&stat, statbuf);
@@ -443,12 +443,13 @@ SYSCALL_DEFINE2(lstat, const char __user *, filename,
SYSCALL_DEFINE2(fstat, unsigned int, fd, struct __old_kernel_stat __user *, statbuf)
{
struct kstat stat;
int error = vfs_fstat(fd, &stat);
int error;
if (!error)
error = cp_old_stat(&stat, statbuf);
error = vfs_fstat(fd, &stat);
if (unlikely(error))
return error;
return error;
return cp_old_stat(&stat, statbuf);
}
#endif /* __ARCH_WANT_OLD_STAT */
@@ -502,10 +503,12 @@ SYSCALL_DEFINE2(newstat, const char __user *, filename,
struct stat __user *, statbuf)
{
struct kstat stat;
int error = vfs_stat(filename, &stat);
int error;
if (error)
error = vfs_stat(filename, &stat);
if (unlikely(error))
return error;
return cp_new_stat(&stat, statbuf);
}
@@ -516,7 +519,7 @@ SYSCALL_DEFINE2(newlstat, const char __user *, filename,
int error;
error = vfs_lstat(filename, &stat);
if (error)
if (unlikely(error))
return error;
return cp_new_stat(&stat, statbuf);
@@ -530,8 +533,9 @@ SYSCALL_DEFINE4(newfstatat, int, dfd, const char __user *, filename,
int error;
error = vfs_fstatat(dfd, filename, &stat, flag);
if (error)
if (unlikely(error))
return error;
return cp_new_stat(&stat, statbuf);
}
#endif
@@ -539,12 +543,13 @@ SYSCALL_DEFINE4(newfstatat, int, dfd, const char __user *, filename,
SYSCALL_DEFINE2(newfstat, unsigned int, fd, struct stat __user *, statbuf)
{
struct kstat stat;
int error = vfs_fstat(fd, &stat);
int error;
if (!error)
error = cp_new_stat(&stat, statbuf);
error = vfs_fstat(fd, &stat);
if (unlikely(error))
return error;
return error;
return cp_new_stat(&stat, statbuf);
}
#endif

View File

@@ -59,7 +59,7 @@ static inline struct fd CLONED_FD(struct file *f)
static inline void fdput(struct fd fd)
{
if (fd.word & FDPUT_FPUT)
if (unlikely(fd.word & FDPUT_FPUT))
fput(fd_file(fd));
}