Btrfs: make the device lock and its protected data in the same cacheline
authorMiao Xie <miaox@cn.fujitsu.com>
Thu, 24 Jul 2014 03:37:10 +0000 (11:37 +0800)
committerChris Mason <clm@fb.com>
Wed, 17 Sep 2014 20:37:45 +0000 (13:37 -0700)
The lock in btrfs_device structure was far away from its protected data, it would
make CPU load the cache line twice when we accessed them, move them together.

Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/volumes.h

index 2aaa00c..6fcc8ea 100644 (file)
@@ -36,30 +36,31 @@ struct btrfs_device {
        struct list_head dev_list;
        struct list_head dev_alloc_list;
        struct btrfs_fs_devices *fs_devices;
+
        struct btrfs_root *dev_root;
 
+       struct rcu_string *name;
+
+       u64 generation;
+
+       spinlock_t io_lock ____cacheline_aligned;
+       int running_pending;
        /* regular prio bios */
        struct btrfs_pending_bios pending_bios;
        /* WRITE_SYNC bios */
        struct btrfs_pending_bios pending_sync_bios;
 
-       u64 generation;
-       int running_pending;
+       struct block_device *bdev;
+
+       /* the mode sent to blkdev_get */
+       fmode_t mode;
+
        int writeable;
        int in_fs_metadata;
        int missing;
        int can_discard;
        int is_tgtdev_for_dev_replace;
 
-       spinlock_t io_lock;
-       /* the mode sent to blkdev_get */
-       fmode_t mode;
-
-       struct block_device *bdev;
-
-
-       struct rcu_string *name;
-
        /* the internal btrfs device id */
        u64 devid;
 
@@ -83,7 +84,6 @@ struct btrfs_device {
        /* minimal io size for this device */
        u32 sector_size;
 
-
        /* physical drive uuid (or lvm uuid) */
        u8 uuid[BTRFS_UUID_SIZE];
 
@@ -107,7 +107,6 @@ struct btrfs_device {
        struct radix_tree_root reada_zones;
        struct radix_tree_root reada_extents;
 
-
        /* disk I/O failure stats. For detailed description refer to
         * enum btrfs_dev_stat_values in ioctl.h */
        int dev_stats_valid;