linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] fs: switch f_iocb_flags and f_version
@ 2024-08-22 14:14 Christian Brauner
  2024-08-22 14:55 ` Jens Axboe
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Christian Brauner @ 2024-08-22 14:14 UTC (permalink / raw)
  To: linux-fsdevel
  Cc: Christian Brauner, Jens Axboe, Al Viro, Linus Torvalds,
	Jeff Layton, Jan Kara

Now that we shrank struct file by 24 bytes we still have a 4 byte hole.
Move f_version into the union and f_iocb_flags out of the union to fill
that hole and shrink struct file by another 4 bytes. This brings struct
file to 200 bytes down from 232 bytes.

I've tried to audit all codepaths that use f_version and none of them
rely on it in file->f_op->release() and never have since commit
1da177e4c3f4 ("Linux-2.6.12-rc2").

Signed-off-by: Christian Brauner <brauner@kernel.org>
---
struct file {
        union {
                struct callback_head f_task_work;        /*     0    16 */
                struct llist_node  f_llist;              /*     0     8 */
                u64                f_version;            /*     0     8 */
        };                                               /*     0    16 */
        spinlock_t                 f_lock;               /*    16     4 */
        fmode_t                    f_mode;               /*    20     4 */
        atomic_long_t              f_count;              /*    24     8 */
        struct mutex               f_pos_lock;           /*    32    32 */
        /* --- cacheline 1 boundary (64 bytes) --- */
        loff_t                     f_pos;                /*    64     8 */
        unsigned int               f_flags;              /*    72     4 */
        unsigned int               f_iocb_flags;         /*    76     4 */
        struct fown_struct *       f_owner;              /*    80     8 */
        const struct cred  *       f_cred;               /*    88     8 */
        struct file_ra_state       f_ra;                 /*    96    32 */
        /* --- cacheline 2 boundary (128 bytes) --- */
        struct path                f_path;               /*   128    16 */
        struct inode *             f_inode;              /*   144     8 */
        const struct file_operations  * f_op;            /*   152     8 */
        void *                     f_security;           /*   160     8 */
        void *                     private_data;         /*   168     8 */
        struct hlist_head *        f_ep;                 /*   176     8 */
        struct address_space *     f_mapping;            /*   184     8 */
        /* --- cacheline 3 boundary (192 bytes) --- */
        errseq_t                   f_wb_err;             /*   192     4 */
        errseq_t                   f_sb_err;             /*   196     4 */

        /* size: 200, cachelines: 4, members: 20 */
        /* last cacheline: 8 bytes */
};
---
 include/linux/fs.h | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/include/linux/fs.h b/include/linux/fs.h
index 7eb4f706d59f..7a2994405e8e 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -998,9 +998,8 @@ 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;
+		u64			f_version;
 	};
-
 	/*
 	 * Protects f_ep, f_flags.
 	 * Must not be taken from IRQ context.
@@ -1011,6 +1010,7 @@ 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;
@@ -1018,7 +1018,6 @@ struct file {
 	struct inode		*f_inode;	/* cached value */
 	const struct file_operations	*f_op;
 
-	u64			f_version;
 #ifdef CONFIG_SECURITY
 	void			*f_security;
 #endif
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH] fs: switch f_iocb_flags and f_version
  2024-08-22 14:14 [PATCH] fs: switch f_iocb_flags and f_version Christian Brauner
@ 2024-08-22 14:55 ` Jens Axboe
  2024-08-22 15:10   ` Christian Brauner
  2024-08-22 15:54 ` Jeff Layton
  2024-08-23  6:24 ` Christoph Hellwig
  2 siblings, 1 reply; 11+ messages in thread
From: Jens Axboe @ 2024-08-22 14:55 UTC (permalink / raw)
  To: Christian Brauner, linux-fsdevel
  Cc: Al Viro, Linus Torvalds, Jeff Layton, Jan Kara

On 8/22/24 8:14 AM, Christian Brauner wrote:
> Now that we shrank struct file by 24 bytes we still have a 4 byte hole.
> Move f_version into the union and f_iocb_flags out of the union to fill
> that hole and shrink struct file by another 4 bytes. This brings struct
> file to 200 bytes down from 232 bytes.

Nice! Now you just need to find 8 more bytes and we'll be down to 3
cachelines for struct file.

> I've tried to audit all codepaths that use f_version and none of them
> rely on it in file->f_op->release() and never have since commit
> 1da177e4c3f4 ("Linux-2.6.12-rc2").

Do we want to add a comment to this effect? I know it's obvious from
sharing with f_task_work, but...

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] fs: switch f_iocb_flags and f_version
  2024-08-22 14:55 ` Jens Axboe
@ 2024-08-22 15:10   ` Christian Brauner
  2024-08-22 16:17     ` Jens Axboe
  0 siblings, 1 reply; 11+ messages in thread
From: Christian Brauner @ 2024-08-22 15:10 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-fsdevel, Al Viro, Linus Torvalds, Jeff Layton, Jan Kara

> Do we want to add a comment to this effect? I know it's obvious from
> sharing with f_task_work, but...

I'll add one.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] fs: switch f_iocb_flags and f_version
  2024-08-22 14:14 [PATCH] fs: switch f_iocb_flags and f_version Christian Brauner
  2024-08-22 14:55 ` Jens Axboe
@ 2024-08-22 15:54 ` Jeff Layton
  2024-08-23  6:24 ` Christoph Hellwig
  2 siblings, 0 replies; 11+ messages in thread
From: Jeff Layton @ 2024-08-22 15:54 UTC (permalink / raw)
  To: Christian Brauner, linux-fsdevel
  Cc: Jens Axboe, Al Viro, Linus Torvalds, Jan Kara

On Thu, 2024-08-22 at 16:14 +0200, Christian Brauner wrote:
> Now that we shrank struct file by 24 bytes we still have a 4 byte hole.
> Move f_version into the union and f_iocb_flags out of the union to fill
> that hole and shrink struct file by another 4 bytes. This brings struct
> file to 200 bytes down from 232 bytes.
> 
> I've tried to audit all codepaths that use f_version and none of them
> rely on it in file->f_op->release() and never have since commit
> 1da177e4c3f4 ("Linux-2.6.12-rc2").
> 
> Signed-off-by: Christian Brauner <brauner@kernel.org>
> ---
> struct file {
>         union {
>                 struct callback_head f_task_work;        /*     0    16 */
>                 struct llist_node  f_llist;              /*     0     8 */
>                 u64                f_version;            /*     0     8 */
>         };                                               /*     0    16 */
>         spinlock_t                 f_lock;               /*    16     4 */
>         fmode_t                    f_mode;               /*    20     4 */
>         atomic_long_t              f_count;              /*    24     8 */
>         struct mutex               f_pos_lock;           /*    32    32 */
>         /* --- cacheline 1 boundary (64 bytes) --- */
>         loff_t                     f_pos;                /*    64     8 */
>         unsigned int               f_flags;              /*    72     4 */
>         unsigned int               f_iocb_flags;         /*    76     4 */
>         struct fown_struct *       f_owner;              /*    80     8 */
>         const struct cred  *       f_cred;               /*    88     8 */
>         struct file_ra_state       f_ra;                 /*    96    32 */
>         /* --- cacheline 2 boundary (128 bytes) --- */
>         struct path                f_path;               /*   128    16 */
>         struct inode *             f_inode;              /*   144     8 */
>         const struct file_operations  * f_op;            /*   152     8 */
>         void *                     f_security;           /*   160     8 */
>         void *                     private_data;         /*   168     8 */
>         struct hlist_head *        f_ep;                 /*   176     8 */
>         struct address_space *     f_mapping;            /*   184     8 */
>         /* --- cacheline 3 boundary (192 bytes) --- */
>         errseq_t                   f_wb_err;             /*   192     4 */
>         errseq_t                   f_sb_err;             /*   196     4 */
> 
>         /* size: 200, cachelines: 4, members: 20 */
>         /* last cacheline: 8 bytes */
> };
> ---
>  include/linux/fs.h | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 7eb4f706d59f..7a2994405e8e 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -998,9 +998,8 @@ 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;
> +		u64			f_version;
>  	};
> -
>  	/*
>  	 * Protects f_ep, f_flags.
>  	 * Must not be taken from IRQ context.
> @@ -1011,6 +1010,7 @@ 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;
> @@ -1018,7 +1018,6 @@ struct file {
>  	struct inode		*f_inode;	/* cached value */
>  	const struct file_operations	*f_op;
>  
> -	u64			f_version;
>  #ifdef CONFIG_SECURITY
>  	void			*f_security;
>  #endif

Reviewed-by: Jeff Layton <jlayton@kernel.org>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] fs: switch f_iocb_flags and f_version
  2024-08-22 15:10   ` Christian Brauner
@ 2024-08-22 16:17     ` Jens Axboe
  2024-08-23  8:16       ` Christian Brauner
  0 siblings, 1 reply; 11+ messages in thread
From: Jens Axboe @ 2024-08-22 16:17 UTC (permalink / raw)
  To: Christian Brauner
  Cc: linux-fsdevel, Al Viro, Linus Torvalds, Jeff Layton, Jan Kara

On 8/22/24 9:10 AM, Christian Brauner wrote:
>> Do we want to add a comment to this effect? I know it's obvious from
>> sharing with f_task_work, but...
> 
> I'll add one.

Sounds good. You can add my:

Reviewed-by: Jens Axboe <axboe@kernel.dk>

as well, forgot to mention that in the original reply.

-- 
Jens Axboe



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] fs: switch f_iocb_flags and f_version
  2024-08-22 14:14 [PATCH] fs: switch f_iocb_flags and f_version Christian Brauner
  2024-08-22 14:55 ` Jens Axboe
  2024-08-22 15:54 ` Jeff Layton
@ 2024-08-23  6:24 ` Christoph Hellwig
  2024-08-23  6:34   ` Al Viro
  2 siblings, 1 reply; 11+ messages in thread
From: Christoph Hellwig @ 2024-08-23  6:24 UTC (permalink / raw)
  To: Christian Brauner
  Cc: linux-fsdevel, Jens Axboe, Al Viro, Linus Torvalds, Jeff Layton,
	Jan Kara

Given that f_version only has about a dozen users maybe just kill
it and make them use the private data instead?  Many of the users
looks pretty bogus to start with as they either only set or only
compare the value as well.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] fs: switch f_iocb_flags and f_version
  2024-08-23  6:24 ` Christoph Hellwig
@ 2024-08-23  6:34   ` Al Viro
  2024-08-23  6:52     ` Christoph Hellwig
  0 siblings, 1 reply; 11+ messages in thread
From: Al Viro @ 2024-08-23  6:34 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Christian Brauner, linux-fsdevel, Jens Axboe, Linus Torvalds,
	Jeff Layton, Jan Kara

On Thu, Aug 22, 2024 at 11:24:43PM -0700, Christoph Hellwig wrote:
> Given that f_version only has about a dozen users maybe just kill
> it and make them use the private data instead?  Many of the users
> looks pretty bogus to start with as they either only set or only
> compare the value as well.

Take a look at the uses in fs/pipe.c

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] fs: switch f_iocb_flags and f_version
  2024-08-23  6:34   ` Al Viro
@ 2024-08-23  6:52     ` Christoph Hellwig
  2024-08-23  6:59       ` Al Viro
  0 siblings, 1 reply; 11+ messages in thread
From: Christoph Hellwig @ 2024-08-23  6:52 UTC (permalink / raw)
  To: Al Viro
  Cc: Christoph Hellwig, Christian Brauner, linux-fsdevel, Jens Axboe,
	Linus Torvalds, Jeff Layton, Jan Kara

On Fri, Aug 23, 2024 at 07:34:11AM +0100, Al Viro wrote:
> On Thu, Aug 22, 2024 at 11:24:43PM -0700, Christoph Hellwig wrote:
> > Given that f_version only has about a dozen users maybe just kill
> > it and make them use the private data instead?  Many of the users
> > looks pretty bogus to start with as they either only set or only
> > compare the value as well.
> 
> Take a look at the uses in fs/pipe.c

I did not say "all", but "many" (and maybe should have said "a few").

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] fs: switch f_iocb_flags and f_version
  2024-08-23  6:52     ` Christoph Hellwig
@ 2024-08-23  6:59       ` Al Viro
  0 siblings, 0 replies; 11+ messages in thread
From: Al Viro @ 2024-08-23  6:59 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Christian Brauner, linux-fsdevel, Jens Axboe, Linus Torvalds,
	Jeff Layton, Jan Kara

On Thu, Aug 22, 2024 at 11:52:41PM -0700, Christoph Hellwig wrote:
> On Fri, Aug 23, 2024 at 07:34:11AM +0100, Al Viro wrote:
> > On Thu, Aug 22, 2024 at 11:24:43PM -0700, Christoph Hellwig wrote:
> > > Given that f_version only has about a dozen users maybe just kill
> > > it and make them use the private data instead?  Many of the users
> > > looks pretty bogus to start with as they either only set or only
> > > compare the value as well.
> > 
> > Take a look at the uses in fs/pipe.c
> 
> I did not say "all", but "many" (and maybe should have said "a few").

Not the point...  From my (admittedly cursory) reading of that code,
we might want different instances of struct file that share the same
pipe_inode_info (pointed to by ->private_data) to have different values
in ->f_version.  If that is true, there's no hope of pushing it into
->private_data - we definitely do not what an extra level of indirection
for getting to pipe_inode_info for those..

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] fs: switch f_iocb_flags and f_version
  2024-08-22 16:17     ` Jens Axboe
@ 2024-08-23  8:16       ` Christian Brauner
  2024-08-24  9:26         ` Christian Brauner
  0 siblings, 1 reply; 11+ messages in thread
From: Christian Brauner @ 2024-08-23  8:16 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-fsdevel, Al Viro, Linus Torvalds, Jeff Layton, Jan Kara

[-- Attachment #1: Type: text/plain, Size: 604 bytes --]

On Thu, Aug 22, 2024 at 10:17:37AM GMT, Jens Axboe wrote:
> On 8/22/24 9:10 AM, Christian Brauner wrote:
> >> Do we want to add a comment to this effect? I know it's obvious from
> >> sharing with f_task_work, but...
> > 
> > I'll add one.
> 
> Sounds good. You can add my:
> 
> Reviewed-by: Jens Axboe <axboe@kernel.dk>
> 
> as well, forgot to mention that in the original reply.

I think we can deliver 192 bytes aka 3 cachelines.
Afaict we can move struct file_ra_state into the union instead of
f_version. See the appended patch I'm testing now. If that works then
we're down by 40 bytes this cycle.

[-- Attachment #2: 0001-fs-switch-f_iocb_flags-and-f_ra.patch --]
[-- Type: text/x-diff, Size: 1652 bytes --]

From 51d5327717b370041733af2f3c6ea3cd75d793e2 Mon Sep 17 00:00:00 2001
From: Christian Brauner <brauner@kernel.org>
Date: Thu, 22 Aug 2024 16:14:46 +0200
Subject: [PATCH] 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").

Signed-off-by: Christian Brauner <brauner@kernel.org>
---
 include/linux/fs.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/linux/fs.h b/include/linux/fs.h
index 7eb4f706d59f..6c19f87ea615 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -998,9 +998,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.
@@ -1011,9 +1011,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;
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH] fs: switch f_iocb_flags and f_version
  2024-08-23  8:16       ` Christian Brauner
@ 2024-08-24  9:26         ` Christian Brauner
  0 siblings, 0 replies; 11+ messages in thread
From: Christian Brauner @ 2024-08-24  9:26 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-fsdevel, Al Viro, Linus Torvalds, Jeff Layton, Jan Kara

[-- Attachment #1: Type: text/plain, Size: 814 bytes --]

On Fri, Aug 23, 2024 at 10:16:28AM GMT, Christian Brauner wrote:
> On Thu, Aug 22, 2024 at 10:17:37AM GMT, Jens Axboe wrote:
> > On 8/22/24 9:10 AM, Christian Brauner wrote:
> > >> Do we want to add a comment to this effect? I know it's obvious from
> > >> sharing with f_task_work, but...
> > > 
> > > I'll add one.
> > 
> > Sounds good. You can add my:
> > 
> > Reviewed-by: Jens Axboe <axboe@kernel.dk>
> > 
> > as well, forgot to mention that in the original reply.
> 
> I think we can deliver 192 bytes aka 3 cachelines.
> Afaict we can move struct file_ra_state into the union instead of
> f_version. See the appended patch I'm testing now. If that works then
> we're down by 40 bytes this cycle.

Seems to hold up. I've reorderd things so that no member crosses a
cacheline. Patch appended and in vfs.misc.

[-- Attachment #2: 0001-fs-pack-struct-file.patch --]
[-- Type: text/x-diff, Size: 4195 bytes --]

From 88dad26dcadd9e8a47ff0cd85e9aef5a5b1667f7 Mon Sep 17 00:00:00 2001
From: Christian Brauner <brauner@kernel.org>
Date: Fri, 23 Aug 2024 21:06:58 +0200
Subject: [PATCH] fs: pack struct file

Now that we shrunk struct file to 192 bytes aka 3 cachelines reorder
struct file to not leave any holes or have members cross cachelines.

Add a short comment to each of the fields and mark the cachelines.
It's possible that we may have to tweak this based on profiling in the
future. So far I had Jens test this comparing io_uring with non-fixed
and fixed files and it improved performance. The layout is a combination
of Jens' and my changes.

Signed-off-by: Christian Brauner <brauner@kernel.org>
---
 include/linux/fs.h | 90 +++++++++++++++++++++++++---------------------
 1 file changed, 50 insertions(+), 40 deletions(-)

diff --git a/include/linux/fs.h b/include/linux/fs.h
index 6c19f87ea615..ace14421d7dc 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -986,52 +986,62 @@ static inline int ra_has_index(struct file_ra_state *ra, pgoff_t index)
 		index <  ra->start + ra->size);
 }
 
-/*
- * f_{lock,count,pos_lock} members can be highly contended and share
- * the same cacheline. f_{lock,mode} are very frequently used together
- * and so share the same cacheline as well. The read-mostly
- * f_{path,inode,op} are kept on a separate cacheline.
+/**
+ * struct file - Represents a file
+ * @f_lock: Protects f_ep, f_flags. Must not be taken from IRQ context.
+ * @f_mode: FMODE_* flags often used in hotpaths
+ * @f_mapping: Contents of a cacheable, mappable object.
+ * @f_flags: file flags
+ * @f_iocb_flags: iocb flags
+ * @private_data: filesystem or driver specific data
+ * @f_path: path of the file
+ * @f_inode: cached inode
+ * @f_count: reference count
+ * @f_pos_lock: lock protecting file position
+ * @f_pos: file position
+ * @f_version: file version
+ * @f_security: LSM security context of this file
+ * @f_owner: file owner
+ * @f_cred: stashed credentials of creator/opener
+ * @f_wb_err: writeback error
+ * @f_sb_err: per sb writeback errors
+ * @f_ep: link of all epoll hooks for this file
+ * @f_task_work: task work entry point
+ * @f_llist: work queue entrypoint
+ * @f_ra: file's readahead state
  */
 struct file {
-	union {
-		/* fput() uses task work when closing and freeing file (default). */
-		struct callback_head 	f_task_work;
-		/* fput() must use workqueue (most kernel threads). */
-		struct llist_node	f_llist;
-		/* Invalid after last fput(). */
-		struct file_ra_state	f_ra;
-	};
-	/*
-	 * Protects f_ep, f_flags.
-	 * Must not be taken from IRQ context.
-	 */
-	spinlock_t		f_lock;
-	fmode_t			f_mode;
-	atomic_long_t		f_count;
-	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 path		f_path;
-	struct inode		*f_inode;	/* cached value */
+	spinlock_t			f_lock;
+	fmode_t				f_mode;
 	const struct file_operations	*f_op;
-
-	u64			f_version;
+	struct address_space		*f_mapping;
+	unsigned int			f_flags;
+	unsigned int			f_iocb_flags;
+	void				*private_data;
+	struct path			f_path;
+	struct inode			*f_inode;
+	/* --- cacheline 1 boundary (64 bytes) --- */
+	atomic_long_t			f_count;
+	struct mutex			f_pos_lock;
+	loff_t				f_pos;
+	u64				f_version;
 #ifdef CONFIG_SECURITY
-	void			*f_security;
+	void				*f_security;
 #endif
-	/* needed for tty driver, and maybe others */
-	void			*private_data;
-
+	/* --- cacheline 2 boundary (128 bytes) --- */
+	struct fown_struct		*f_owner;
+	const struct cred		*f_cred;
+	errseq_t			f_wb_err;
+	errseq_t			f_sb_err;
 #ifdef CONFIG_EPOLL
-	/* Used by fs/eventpoll.c to link all the hooks to this file */
-	struct hlist_head	*f_ep;
-#endif /* #ifdef CONFIG_EPOLL */
-	struct address_space	*f_mapping;
-	errseq_t		f_wb_err;
-	errseq_t		f_sb_err; /* for syncfs */
+	struct hlist_head		*f_ep;
+#endif
+	union {
+		struct callback_head	f_task_work;
+		struct llist_node	f_llist;
+		struct file_ra_state	f_ra;
+	};
+	/* --- cacheline 2 boundary (192 bytes) --- */
 } __randomize_layout
   __attribute__((aligned(4)));	/* lest something weird decides that 2 is OK */
 
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2024-08-24  9:26 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-22 14:14 [PATCH] fs: switch f_iocb_flags and f_version Christian Brauner
2024-08-22 14:55 ` Jens Axboe
2024-08-22 15:10   ` Christian Brauner
2024-08-22 16:17     ` Jens Axboe
2024-08-23  8:16       ` Christian Brauner
2024-08-24  9:26         ` Christian Brauner
2024-08-22 15:54 ` Jeff Layton
2024-08-23  6:24 ` Christoph Hellwig
2024-08-23  6:34   ` Al Viro
2024-08-23  6:52     ` Christoph Hellwig
2024-08-23  6:59       ` Al Viro

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).