Use the dmz_zone_to_dev() mapping function to remove the
'dev' argument from reclaim.

Signed-off-by: Hannes Reinecke <[email protected]>
Reviewed-by: Bob Liu <[email protected]>
---
 drivers/md/dm-zoned-reclaim.c | 58 +++++++++++++++++++++++--------------------
 drivers/md/dm-zoned-target.c  |  2 +-
 drivers/md/dm-zoned.h         |  3 ++-
 3 files changed, 34 insertions(+), 29 deletions(-)

diff --git a/drivers/md/dm-zoned-reclaim.c b/drivers/md/dm-zoned-reclaim.c
index 5daede0daf92..39ea0d5d4706 100644
--- a/drivers/md/dm-zoned-reclaim.c
+++ b/drivers/md/dm-zoned-reclaim.c
@@ -13,7 +13,6 @@
 
 struct dmz_reclaim {
        struct dmz_metadata     *metadata;
-       struct dmz_dev          *dev;
 
        struct delayed_work     work;
        struct workqueue_struct *wq;
@@ -59,6 +58,7 @@ static int dmz_reclaim_align_wp(struct dmz_reclaim *zrc, 
struct dm_zone *zone,
                                sector_t block)
 {
        struct dmz_metadata *zmd = zrc->metadata;
+       struct dmz_dev *dev = dmz_zone_to_dev(zmd, zone);
        sector_t wp_block = zone->wp_block;
        unsigned int nr_blocks;
        int ret;
@@ -74,15 +74,15 @@ static int dmz_reclaim_align_wp(struct dmz_reclaim *zrc, 
struct dm_zone *zone,
         * pointer and the requested position.
         */
        nr_blocks = block - wp_block;
-       ret = blkdev_issue_zeroout(zrc->dev->bdev,
+       ret = blkdev_issue_zeroout(dev->bdev,
                                   dmz_start_sect(zmd, zone) + 
dmz_blk2sect(wp_block),
                                   dmz_blk2sect(nr_blocks), GFP_NOIO, 0);
        if (ret) {
-               dmz_dev_err(zrc->dev,
+               dmz_dev_err(dev,
                            "Align zone %u wp %llu to %llu (wp+%u) blocks 
failed %d",
                            zone->id, (unsigned long long)wp_block,
                            (unsigned long long)block, nr_blocks, ret);
-               dmz_check_bdev(zrc->dev);
+               dmz_check_bdev(dev);
                return ret;
        }
 
@@ -116,7 +116,7 @@ static int dmz_reclaim_copy(struct dmz_reclaim *zrc,
                            struct dm_zone *src_zone, struct dm_zone *dst_zone)
 {
        struct dmz_metadata *zmd = zrc->metadata;
-       struct dmz_dev *dev = zrc->dev;
+       struct dmz_dev *src_dev, *dst_dev;
        struct dm_io_region src, dst;
        sector_t block = 0, end_block;
        sector_t nr_blocks;
@@ -130,13 +130,17 @@ static int dmz_reclaim_copy(struct dmz_reclaim *zrc,
        else
                end_block = dmz_zone_nr_blocks(zmd);
        src_zone_block = dmz_start_block(zmd, src_zone);
+       src_dev = dmz_zone_to_dev(zmd, src_zone);
        dst_zone_block = dmz_start_block(zmd, dst_zone);
+       dst_dev = dmz_zone_to_dev(zmd, dst_zone);
 
        if (dmz_is_seq(dst_zone))
                set_bit(DM_KCOPYD_WRITE_SEQ, &flags);
 
        while (block < end_block) {
-               if (dev->flags & DMZ_BDEV_DYING)
+               if (src_dev->flags & DMZ_BDEV_DYING)
+                       return -EIO;
+               if (dst_dev->flags & DMZ_BDEV_DYING)
                        return -EIO;
 
                /* Get a valid region from the source zone */
@@ -156,11 +160,11 @@ static int dmz_reclaim_copy(struct dmz_reclaim *zrc,
                                return ret;
                }
 
-               src.bdev = dev->bdev;
+               src.bdev = src_dev->bdev;
                src.sector = dmz_blk2sect(src_zone_block + block);
                src.count = dmz_blk2sect(nr_blocks);
 
-               dst.bdev = dev->bdev;
+               dst.bdev = dst_dev->bdev;
                dst.sector = dmz_blk2sect(dst_zone_block + block);
                dst.count = src.count;
 
@@ -194,10 +198,10 @@ static int dmz_reclaim_buf(struct dmz_reclaim *zrc, 
struct dm_zone *dzone)
        struct dmz_metadata *zmd = zrc->metadata;
        int ret;
 
-       dmz_dev_debug(zrc->dev,
-                     "Chunk %u, move buf zone %u (weight %u) to data zone %u 
(weight %u)",
-                     dzone->chunk, bzone->id, dmz_weight(bzone),
-                     dzone->id, dmz_weight(dzone));
+       DMDEBUG("(%s): Chunk %u, move buf zone %u (weight %u) to data zone %u 
(weight %u)",
+               dmz_metadata_label(zmd),
+               dzone->chunk, bzone->id, dmz_weight(bzone),
+               dzone->id, dmz_weight(dzone));
 
        /* Flush data zone into the buffer zone */
        ret = dmz_reclaim_copy(zrc, bzone, dzone);
@@ -233,10 +237,10 @@ static int dmz_reclaim_seq_data(struct dmz_reclaim *zrc, 
struct dm_zone *dzone)
        struct dmz_metadata *zmd = zrc->metadata;
        int ret = 0;
 
-       dmz_dev_debug(zrc->dev,
-                     "Chunk %u, move data zone %u (weight %u) to buf zone %u 
(weight %u)",
-                     chunk, dzone->id, dmz_weight(dzone),
-                     bzone->id, dmz_weight(bzone));
+       DMDEBUG("(%s): Chunk %u, move data zone %u (weight %u) to buf zone %u 
(weight %u)",
+               dmz_metadata_label(zmd),
+               chunk, dzone->id, dmz_weight(dzone),
+               bzone->id, dmz_weight(bzone));
 
        /* Flush data zone into the buffer zone */
        ret = dmz_reclaim_copy(zrc, dzone, bzone);
@@ -285,9 +289,9 @@ static int dmz_reclaim_rnd_data(struct dmz_reclaim *zrc, 
struct dm_zone *dzone)
        if (!szone)
                return -ENOSPC;
 
-       dmz_dev_debug(zrc->dev,
-                     "Chunk %u, move rnd zone %u (weight %u) to seq zone %u",
-                     chunk, dzone->id, dmz_weight(dzone), szone->id);
+       DMDEBUG("(%s): Chunk %u, move rnd zone %u (weight %u) to seq zone %u",
+               dmz_metadata_label(zmd),
+               chunk, dzone->id, dmz_weight(dzone), szone->id);
 
        /* Flush the random data zone into the sequential zone */
        ret = dmz_reclaim_copy(zrc, dzone, szone);
@@ -343,6 +347,7 @@ static int dmz_do_reclaim(struct dmz_reclaim *zrc)
        struct dmz_metadata *zmd = zrc->metadata;
        struct dm_zone *dzone;
        struct dm_zone *rzone;
+       struct dmz_dev *dev;
        unsigned long start;
        int ret;
 
@@ -352,7 +357,7 @@ static int dmz_do_reclaim(struct dmz_reclaim *zrc)
                return PTR_ERR(dzone);
 
        start = jiffies;
-
+       dev = dmz_zone_to_dev(zmd, dzone);
        if (dmz_is_rnd(dzone)) {
                if (!dmz_weight(dzone)) {
                        /* Empty zone */
@@ -400,14 +405,14 @@ static int dmz_do_reclaim(struct dmz_reclaim *zrc)
 
        ret = dmz_flush_metadata(zrc->metadata);
        if (ret) {
-               dmz_dev_debug(zrc->dev,
-                             "Metadata flush for zone %u failed, err %d\n",
-                             rzone->id, ret);
+               DMDEBUG("(%s): Metadata flush for zone %u failed, err %d\n",
+                       dmz_metadata_label(zmd), rzone->id, ret);
                return ret;
        }
 
-       dmz_dev_debug(zrc->dev, "Reclaimed zone %u in %u ms",
-                     rzone->id, jiffies_to_msecs(jiffies - start));
+       DMDEBUG("(%s): Reclaimed zone %u in %u ms",
+               dmz_metadata_label(zmd),
+               rzone->id, jiffies_to_msecs(jiffies - start));
        return 0;
 }
 
@@ -500,7 +505,7 @@ static void dmz_reclaim_work(struct work_struct *work)
 /*
  * Initialize reclaim.
  */
-int dmz_ctr_reclaim(struct dmz_dev *dev, struct dmz_metadata *zmd,
+int dmz_ctr_reclaim(struct dmz_metadata *zmd,
                    struct dmz_reclaim **reclaim)
 {
        struct dmz_reclaim *zrc;
@@ -510,7 +515,6 @@ int dmz_ctr_reclaim(struct dmz_dev *dev, struct 
dmz_metadata *zmd,
        if (!zrc)
                return -ENOMEM;
 
-       zrc->dev = dev;
        zrc->metadata = zmd;
        zrc->atime = jiffies;
 
diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
index 15f00535060f..a1f42af2877c 100644
--- a/drivers/md/dm-zoned-target.c
+++ b/drivers/md/dm-zoned-target.c
@@ -840,7 +840,7 @@ static int dmz_ctr(struct dm_target *ti, unsigned int argc, 
char **argv)
        mod_delayed_work(dmz->flush_wq, &dmz->flush_work, DMZ_FLUSH_PERIOD);
 
        /* Initialize reclaim */
-       ret = dmz_ctr_reclaim(dev, dmz->metadata, &dmz->reclaim);
+       ret = dmz_ctr_reclaim(dmz->metadata, &dmz->reclaim);
        if (ret) {
                ti->error = "Zone reclaim initialization failed";
                goto err_fwq;
diff --git a/drivers/md/dm-zoned.h b/drivers/md/dm-zoned.h
index e0883df8a903..454ebd628cca 100644
--- a/drivers/md/dm-zoned.h
+++ b/drivers/md/dm-zoned.h
@@ -180,6 +180,7 @@ const char *dmz_metadata_label(struct dmz_metadata *zmd);
 sector_t dmz_start_sect(struct dmz_metadata *zmd, struct dm_zone *zone);
 sector_t dmz_start_block(struct dmz_metadata *zmd, struct dm_zone *zone);
 unsigned int dmz_nr_chunks(struct dmz_metadata *zmd);
+struct dmz_dev *dmz_zone_to_dev(struct dmz_metadata *zmd, struct dm_zone 
*zone);
 
 bool dmz_check_dev(struct dmz_metadata *zmd);
 bool dmz_dev_is_dying(struct dmz_metadata *zmd);
@@ -254,7 +255,7 @@ int dmz_merge_valid_blocks(struct dmz_metadata *zmd, struct 
dm_zone *from_zone,
 /*
  * Functions defined in dm-zoned-reclaim.c
  */
-int dmz_ctr_reclaim(struct dmz_dev *dev, struct dmz_metadata *zmd,
+int dmz_ctr_reclaim(struct dmz_metadata *zmd,
                    struct dmz_reclaim **zrc);
 void dmz_dtr_reclaim(struct dmz_reclaim *zrc);
 void dmz_suspend_reclaim(struct dmz_reclaim *zrc);
-- 
2.16.4


--
dm-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to