mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 05:04:51 +01:00
ext4: specify the free pointer offset for ext4_inode_cache
Convert ext4_inode_cache to use the kmem_cache_args interface and specify a free pointer offset. Since ext4_inode_cache uses a constructor, the free pointer would be placed after the object to prevent overwriting fields used by the constructor. However, some fields such as ->i_flags are not used by the constructor and can safely be repurposed for the free pointer. Specify the free pointer offset at i_flags to reduce the object size. Signed-off-by: Harry Yoo <harry.yoo@oracle.com> Link: https://patch.msgid.link/20260113061845.159790-4-harry.yoo@oracle.com Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
This commit is contained in:
parent
a13b68d79d
commit
43d9bb4236
1 changed files with 13 additions and 6 deletions
|
|
@ -1491,12 +1491,19 @@ static void init_once(void *foo)
|
|||
|
||||
static int __init init_inodecache(void)
|
||||
{
|
||||
ext4_inode_cachep = kmem_cache_create_usercopy("ext4_inode_cache",
|
||||
sizeof(struct ext4_inode_info), 0,
|
||||
SLAB_RECLAIM_ACCOUNT | SLAB_ACCOUNT,
|
||||
offsetof(struct ext4_inode_info, i_data),
|
||||
sizeof_field(struct ext4_inode_info, i_data),
|
||||
init_once);
|
||||
struct kmem_cache_args args = {
|
||||
.useroffset = offsetof(struct ext4_inode_info, i_data),
|
||||
.usersize = sizeof_field(struct ext4_inode_info, i_data),
|
||||
.use_freeptr_offset = true,
|
||||
.freeptr_offset = offsetof(struct ext4_inode_info, i_flags),
|
||||
.ctor = init_once,
|
||||
};
|
||||
|
||||
ext4_inode_cachep = kmem_cache_create("ext4_inode_cache",
|
||||
sizeof(struct ext4_inode_info),
|
||||
&args,
|
||||
SLAB_RECLAIM_ACCOUNT | SLAB_ACCOUNT);
|
||||
|
||||
if (ext4_inode_cachep == NULL)
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue