summaryrefslogtreecommitdiff
path: root/include/linux/fs.h
diff options
context:
space:
mode:
authorChristian Brauner <brauner@kernel.org>2024-08-22 16:14:46 +0200
committerChristian Brauner <brauner@kernel.org>2024-08-28 13:06:12 +0200
commita55d1cbd1720679cfe9837bce250e397ec513989 (patch)
treed21d06bb5e34e8f3f761003eb59d1a9ebd0b387f /include/linux/fs.h
parent1934b212615dc617ac84fc306333ab2b9fc3b04f (diff)
fs: switch f_iocb_flags and f_ra
Now that we shrank struct file by 24 bytes we still have a 4 byte hole. If we move struct file_ra_state into the union and f_iocb_flags out of the union we close that whole and bring down struct file to 192 bytes. Which means struct file is 3 cachelines and we managed to shrink it by 40 bytes this cycle. I've tried to audit all codepaths that use f_ra and none of them seem to rely on it in file->f_op->release() and never have since commit 1da177e4c3f4 ("Linux-2.6.12-rc2"). Link: https://lore.kernel.org/r/20240823-luftdicht-berappen-d69a2166a0db@brauner Reviewed-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r--include/linux/fs.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 7af239ca87e2..095a956aeb29 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -999,9 +999,9 @@ struct file {
struct callback_head f_task_work;
/* fput() must use workqueue (most kernel threads). */
struct llist_node f_llist;
- unsigned int f_iocb_flags;
+ /* Invalid after last fput(). */
+ struct file_ra_state f_ra;
};
-
/*
* Protects f_ep, f_flags.
* Must not be taken from IRQ context.
@@ -1012,9 +1012,9 @@ struct file {
struct mutex f_pos_lock;
loff_t f_pos;
unsigned int f_flags;
+ unsigned int f_iocb_flags;
struct fown_struct *f_owner;
const struct cred *f_cred;
- struct file_ra_state f_ra;
struct path f_path;
struct inode *f_inode; /* cached value */
const struct file_operations *f_op;