OSDN Git Service

dm zoned: avoid unnecessary device recalulation for secondary superblock
authorHannes Reinecke <hare@suse.de>
Tue, 2 Jun 2020 11:09:43 +0000 (13:09 +0200)
committerMike Snitzer <snitzer@redhat.com>
Fri, 5 Jun 2020 18:59:44 +0000 (14:59 -0400)
The secondary superblock must reside on the same device as the primary
superblock, so there is no need to re-calculate the device.

Signed-off-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-zoned-metadata.c

index ef1524d..043ed88 100644 (file)
@@ -1135,7 +1135,7 @@ static int dmz_lookup_secondary_sb(struct dmz_metadata *zmd)
        /* Bad first super block: search for the second one */
        zmd->sb[1].block = zmd->sb[0].block + zone_nr_blocks;
        zmd->sb[1].zone = zmd->sb[0].zone + 1;
-       zmd->sb[1].dev = dmz_zone_to_dev(zmd, zmd->sb[1].zone);
+       zmd->sb[1].dev = zmd->sb[0].dev;
        for (i = 0; i < zmd->nr_rnd_zones - 1; i++) {
                if (dmz_read_sb(zmd, 1) != 0)
                        break;
@@ -1144,7 +1144,6 @@ static int dmz_lookup_secondary_sb(struct dmz_metadata *zmd)
                        return 0;
                }
                zmd->sb[1].block += zone_nr_blocks;
-               zmd->sb[1].dev = dmz_zone_to_dev(zmd, zmd->sb[1].zone + i);
        }
 
        dmz_free_mblock(zmd, mblk);
@@ -1263,7 +1262,7 @@ static int dmz_load_sb(struct dmz_metadata *zmd)
                if (!zmd->sb[1].zone)
                        zmd->sb[1].zone = zmd->sb[0].zone + zmd->nr_meta_zones;
                zmd->sb[1].block = dmz_start_block(zmd, zmd->sb[1].zone);
-               zmd->sb[1].dev = dmz_zone_to_dev(zmd, zmd->sb[1].zone);
+               zmd->sb[1].dev = zmd->sb[0].dev;
                ret = dmz_get_sb(zmd, 1);
        } else
                ret = dmz_lookup_secondary_sb(zmd);