block: re-arrange the struct block_device fields for better layout
authorJens Axboe <axboe@kernel.dk>
Fri, 14 Apr 2023 13:30:16 +0000 (07:30 -0600)
committerJens Axboe <axboe@kernel.dk>
Sun, 16 Apr 2023 19:01:35 +0000 (13:01 -0600)
This moves struct device out-of-line as it's just used at open/close
time, so we can keep some of the commonly used fields closer together.
On a standard setup, it also reduces the size from 864 bytes to 848
bytes. Yes, struct device is a pig...

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
include/linux/blk_types.h

index 99be590f952f6e69d47900b970f05f0195e98798..c1da616fadae11d5bcb9921d88028b6170b2e94b 100644 (file)
@@ -40,26 +40,25 @@ struct bio_crypt_ctx;
 struct block_device {
        sector_t                bd_start_sect;
        sector_t                bd_nr_sectors;
+       struct gendisk *        bd_disk;
+       struct request_queue *  bd_queue;
        struct disk_stats __percpu *bd_stats;
        unsigned long           bd_stamp;
        bool                    bd_read_only;   /* read-only policy */
+       u8                      bd_partno;
+       bool                    bd_write_holder;
        dev_t                   bd_dev;
        atomic_t                bd_openers;
+       spinlock_t              bd_size_lock; /* for bd_inode->i_size updates */
        struct inode *          bd_inode;       /* will die */
        struct super_block *    bd_super;
        void *                  bd_claiming;
-       struct device           bd_device;
        void *                  bd_holder;
+       /* The counter of freeze processes */
+       int                     bd_fsfreeze_count;
        int                     bd_holders;
-       bool                    bd_write_holder;
        struct kobject          *bd_holder_dir;
-       u8                      bd_partno;
-       spinlock_t              bd_size_lock; /* for bd_inode->i_size updates */
-       struct gendisk *        bd_disk;
-       struct request_queue *  bd_queue;
 
-       /* The counter of freeze processes */
-       int                     bd_fsfreeze_count;
        /* Mutex for freeze */
        struct mutex            bd_fsfreeze_mutex;
        struct super_block      *bd_fsfreeze_sb;
@@ -68,6 +67,11 @@ struct block_device {
 #ifdef CONFIG_FAIL_MAKE_REQUEST
        bool                    bd_make_it_fail;
 #endif
+       /*
+        * keep this out-of-line as it's both big and not needed in the fast
+        * path
+        */
+       struct device           bd_device;
 } __randomize_layout;
 
 #define bdev_whole(_bdev) \