]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ext4: adjust the layout of the ext4_inode_info structure to save memory
authorJunchao Sun <sunjunchao2870@gmail.com>
Mon, 3 Jun 2024 13:15:24 +0000 (21:15 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 21 Aug 2024 01:37:00 +0000 (21:37 -0400)
Using pahole, we can see that there are some padding holes
in the current ext4_inode_info structure. Adjusting the
layout of ext4_inode_info can reduce these holes,
resulting in the size of the structure decreasing
from 2424 bytes to 2408 bytes.

Signed-off-by: Junchao Sun <sunjunchao2870@gmail.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://patch.msgid.link/20240603131524.324224-1-sunjunchao2870@gmail.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/ext4.h

index 08acd152261ed87e0d4586cbecfe3b04b50f615d..3d57acae0925f04eabedb12ee76a3f8d9a4ad609 100644 (file)
@@ -1058,6 +1058,7 @@ struct ext4_inode_info {
 
        /* Number of ongoing updates on this inode */
        atomic_t  i_fc_updates;
+       atomic_t i_unwritten; /* Nr. of inflight conversions pending */
 
        /* Fast commit wait queue for this inode */
        wait_queue_head_t i_fc_wait;
@@ -1106,6 +1107,10 @@ struct ext4_inode_info {
 
        /* mballoc */
        atomic_t i_prealloc_active;
+
+       /* allocation reservation info for delalloc */
+       /* In case of bigalloc, this refer to clusters rather than blocks */
+       unsigned int i_reserved_data_blocks;
        struct rb_root i_prealloc_node;
        rwlock_t i_prealloc_lock;
 
@@ -1122,10 +1127,6 @@ struct ext4_inode_info {
        /* ialloc */
        ext4_group_t    i_last_alloc_group;
 
-       /* allocation reservation info for delalloc */
-       /* In case of bigalloc, this refer to clusters rather than blocks */
-       unsigned int i_reserved_data_blocks;
-
        /* pending cluster reservations for bigalloc file systems */
        struct ext4_pending_tree i_pending_tree;
 
@@ -1149,7 +1150,6 @@ struct ext4_inode_info {
         */
        struct list_head i_rsv_conversion_list;
        struct work_struct i_rsv_conversion_work;
-       atomic_t i_unwritten; /* Nr. of inflight conversions pending */
 
        spinlock_t i_block_reservation_lock;