btrfs: reduce size of prelim_ref::level
authorDavid Sterba <dsterba@suse.com>
Thu, 7 Sep 2023 23:09:35 +0000 (01:09 +0200)
committerDavid Sterba <dsterba@suse.com>
Thu, 12 Oct 2023 14:44:04 +0000 (16:44 +0200)
The values of level are bounded and fit into a byte so let's use it for
the structure to reduce size from 88 to 80 bytes on a release build,
which increases number of objects in the default 8K slab from 93 to 102.

struct prelim_ref {
        struct rb_node             rbnode __attribute__((__aligned__(8))); /*     0    24 */
        u64                        root_id;              /*    24     8 */
        struct btrfs_key           key_for_search;       /*    32    17 */
        u8                         level;                /*    49     1 */

        /* XXX 2 bytes hole, try to pack */

        int                        count;                /*    52     4 */
        struct extent_inode_elem * inode_list;           /*    56     8 */
        /* --- cacheline 1 boundary (64 bytes) --- */
        u64                        parent;               /*    64     8 */
        u64                        wanted_disk_byte;     /*    72     8 */

        /* size: 80, cachelines: 2, members: 8 */
        /* sum members: 78, holes: 1, sum holes: 2 */
        /* forced alignments: 1 */
        /* last cacheline: 16 bytes */
} __attribute__((__aligned__(8)));

Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/backref.h

index 1616e3e3f1e4193c7fc531737e65da47698fc049..79742935399f4f0612fced5b775e042b301cb757 100644 (file)
@@ -247,7 +247,7 @@ struct prelim_ref {
        struct rb_node rbnode;
        u64 root_id;
        struct btrfs_key key_for_search;
-       int level;
+       u8 level;
        int count;
        struct extent_inode_elem *inode_list;
        u64 parent;