block: re-organize fields of 'struct hd_part'
authorMing Lei <ming.lei@redhat.com>
Fri, 8 May 2020 08:17:57 +0000 (16:17 +0800)
committerJens Axboe <axboe@kernel.dk>
Wed, 13 May 2020 02:31:39 +0000 (20:31 -0600)
Put all fields accessed in IO path together at the beginning
of the struct, so that all can be fetched in single cacheline.

Signed-off-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Christoph Hellwig <hch@infradead.org>
Cc: Yufen Yu <yuyufen@huawei.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Hou Tao <houtao1@huawei.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
include/linux/genhd.h

index b474403..a938444 100644 (file)
@@ -71,6 +71,14 @@ struct hd_struct {
 #if BITS_PER_LONG==32 && defined(CONFIG_SMP)
        seqcount_t nr_sects_seq;
 #endif
+       unsigned long stamp;
+#ifdef CONFIG_SMP
+       struct disk_stats __percpu *dkstats;
+#else
+       struct disk_stats dkstats;
+#endif
+       struct percpu_ref ref;
+
        sector_t alignment_offset;
        unsigned int discard_alignment;
        struct device __dev;
@@ -80,13 +88,6 @@ struct hd_struct {
 #ifdef CONFIG_FAIL_MAKE_REQUEST
        int make_it_fail;
 #endif
-       unsigned long stamp;
-#ifdef CONFIG_SMP
-       struct disk_stats __percpu *dkstats;
-#else
-       struct disk_stats dkstats;
-#endif
-       struct percpu_ref ref;
        struct rcu_work rcu_work;
 };