@@ -1366,8 +1366,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;
@@ -1490,8 +1490,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);
@@ -1526,7 +1530,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);
@@ -45,11 +45,15 @@
#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
*/