diff options
author | Jens Axboe <axboe@kernel.dk> | 2023-04-14 07:30:16 -0600 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2023-04-16 13:01:35 -0600 |
commit | 3838c406a594f15600ad6f83c1e3b16bfd1829d0 (patch) | |
tree | c3fbb0bdfc6ea0316c1beb5d1836ceaf0f54cfce | |
parent | 310e9c85c61a4393e772c9286947e259bb8c32a7 (diff) | |
download | lwn-3838c406a594f15600ad6f83c1e3b16bfd1829d0.tar.gz lwn-3838c406a594f15600ad6f83c1e3b16bfd1829d0.zip |
block: re-arrange the struct block_device fields for better layout
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>
-rw-r--r-- | include/linux/blk_types.h | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index 99be590f952f..c1da616fadae 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h @@ -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) \ |