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

fs: use kmem_cache_create_rcu()

Switch to the new kmem_cache_create_rcu() helper which allows us to use
a custom free pointer offset avoiding the need to have an external free
pointer which would grow struct file behind our backs.

Link: https://lore.kernel.org/r/20240828-work-kmem_cache-rcu-v3-3-5460bc1f09f6@kernel.org


Acked-by: default avatarMike Rapoport (Microsoft) <rppt@kernel.org>
Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent d345bd2e
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -511,9 +511,9 @@ EXPORT_SYMBOL(__fput_sync);

void __init files_init(void)
{
	filp_cachep = kmem_cache_create("filp", sizeof(struct file), 0,
				SLAB_TYPESAFE_BY_RCU | SLAB_HWCACHE_ALIGN |
				SLAB_PANIC | SLAB_ACCOUNT, NULL);
	filp_cachep = kmem_cache_create_rcu("filp", sizeof(struct file),
				offsetof(struct file, f_freeptr),
				SLAB_HWCACHE_ALIGN | SLAB_PANIC | SLAB_ACCOUNT);
	percpu_counter_init(&nr_files, 0, GFP_KERNEL);
}

+2 −0
Original line number Diff line number Diff line
@@ -1011,6 +1011,7 @@ static inline int ra_has_index(struct file_ra_state *ra, pgoff_t index)
 * @f_task_work: task work entry point
 * @f_llist: work queue entrypoint
 * @f_ra: file's readahead state
 * @f_freeptr: Pointer used by SLAB_TYPESAFE_BY_RCU file cache (don't touch.)
 */
struct file {
	atomic_long_t			f_count;
@@ -1042,6 +1043,7 @@ struct file {
		struct callback_head	f_task_work;
		struct llist_node	f_llist;
		struct file_ra_state	f_ra;
		freeptr_t		f_freeptr;
	};
	/* --- cacheline 3 boundary (192 bytes) --- */
} __randomize_layout