Commit a55d1cbd authored by Christian Brauner's avatar Christian Brauner
Browse files

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
1da177e4 ("Linux-2.6.12-rc2").

Link: https://lore.kernel.org/r/20240823-luftdicht-berappen-d69a2166a0db@brauner


Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Reviewed-by: default avatarJens Axboe <axboe@kernel.dk>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 1934b212
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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;