summaryrefslogtreecommitdiff
path: root/drivers/md/dm-zoned-metadata.c
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2020-06-02 14:09:49 +0300
committerMike Snitzer <snitzer@redhat.com>2020-06-05 21:59:49 +0300
commit18979819b57ecbc598a8e27d925ab4bb9e145cf0 (patch)
tree4861c3c98531bc7c20a6aae7beb7d74071bdaf0e /drivers/md/dm-zoned-metadata.c
parent8f22272af7a72763fe9f6b710cdcc380fed80f75 (diff)
downloadlinux-18979819b57ecbc598a8e27d925ab4bb9e145cf0.tar.xz
dm zoned: add metadata pointer to struct dmz_dev
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>
Diffstat (limited to 'drivers/md/dm-zoned-metadata.c')
-rw-r--r--drivers/md/dm-zoned-metadata.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
index 68d44506e6f3..71f263a78515 100644
--- a/drivers/md/dm-zoned-metadata.c
+++ b/drivers/md/dm-zoned-metadata.c
@@ -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);