]> git.baikalelectronics.ru Git - kernel.git/commitdiff
dm zoned: add metadata pointer to struct dmz_dev
authorHannes Reinecke <hare@suse.de>
Tue, 2 Jun 2020 11:09:49 +0000 (13:09 +0200)
committerMike Snitzer <snitzer@redhat.com>
Fri, 5 Jun 2020 18:59:49 +0000 (14:59 -0400)
Add a metadata pointer within struct dmz_dev and use it as argument
for blkdev_report_zones() instead of the metadata itself.

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
drivers/md/dm-zoned.h

index 68d44506e6f34753650082aeb22ed5bb2b5ee7e3..71f263a7851525bb5812e8d9fe8106bb9c30b6c9 100644 (file)
@@ -1371,8 +1371,8 @@ static int dmz_load_sb(struct dmz_metadata *zmd)
  */
 static int dmz_init_zone(struct blk_zone *blkz, unsigned int num, void *data)
 {
-       struct dmz_metadata *zmd = data;
-       struct dmz_dev *dev = zmd->nr_devs > 1 ? &zmd->dev[1] : &zmd->dev[0];
+       struct dmz_dev *dev = data;
+       struct dmz_metadata *zmd = dev->metadata;
        int idx = num + dev->zone_offset;
        struct dm_zone *zone;
 
@@ -1495,8 +1495,12 @@ static int dmz_init_zones(struct dmz_metadata *zmd)
 
        /* Allocate zone array */
        zmd->nr_zones = 0;
-       for (i = 0; i < zmd->nr_devs; i++)
-               zmd->nr_zones += zmd->dev[i].nr_zones;
+       for (i = 0; i < zmd->nr_devs; i++) {
+               struct dmz_dev *dev = &zmd->dev[i];
+
+               dev->metadata = zmd;
+               zmd->nr_zones += dev->nr_zones;
+       }
 
        if (!zmd->nr_zones) {
                DMERR("(%s): No zones found", zmd->devname);
@@ -1531,7 +1535,7 @@ static int dmz_init_zones(struct dmz_metadata *zmd)
         * first randomly writable zone.
         */
        ret = blkdev_report_zones(zoned_dev->bdev, 0, BLK_ALL_ZONES,
-                                 dmz_init_zone, zmd);
+                                 dmz_init_zone, zoned_dev);
        if (ret < 0) {
                DMDEBUG("(%s): Failed to report zones, error %d",
                        zmd->devname, ret);
index 316344bf07bd56f57c6c0f320c436edad9291913..983f5b5e9fa04ac3aff040b223ca4d19e55d6a86 100644 (file)
 #define dmz_bio_block(bio)     dmz_sect2blk((bio)->bi_iter.bi_sector)
 #define dmz_bio_blocks(bio)    dmz_sect2blk(bio_sectors(bio))
 
+struct dmz_metadata;
+struct dmz_reclaim;
+
 /*
  * Zoned block device information.
  */
 struct dmz_dev {
        struct block_device     *bdev;
+       struct dmz_metadata     *metadata;
 
        char                    name[BDEVNAME_SIZE];
        uuid_t                  uuid;
@@ -170,9 +174,6 @@ enum {
 #define dmz_dev_debug(dev, format, args...)    \
        DMDEBUG("(%s): " format, (dev)->name, ## args)
 
-struct dmz_metadata;
-struct dmz_reclaim;
-
 /*
  * Functions defined in dm-zoned-metadata.c
  */