dm zoned: Introduce dmz_dev_is_dying() and dmz_check_dev()
authorHannes Reinecke <hare@suse.de>
Mon, 11 May 2020 08:24:23 +0000 (10:24 +0200)
committerMike Snitzer <snitzer@redhat.com>
Fri, 15 May 2020 14:29:37 +0000 (10:29 -0400)
Introduce accessors dmz_dev_is_dying() and dmz_check_dev() to
avoid having to reference the devices directly.

Signed-off-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Bob Liu <bob.liu@oracle.com>
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-reclaim.c
drivers/md/dm-zoned-target.c
drivers/md/dm-zoned.h

index 7cda48683c0bc25a7a17c7f8af30d4d7d550ecd5..426af738f1cae660d5090ce5ae5aa4047b7d99fd 100644 (file)
@@ -267,6 +267,16 @@ const char *dmz_metadata_label(struct dmz_metadata *zmd)
        return (const char *)zmd->devname;
 }
 
+bool dmz_check_dev(struct dmz_metadata *zmd)
+{
+       return dmz_check_bdev(&zmd->dev[0]);
+}
+
+bool dmz_dev_is_dying(struct dmz_metadata *zmd)
+{
+       return dmz_bdev_is_dying(&zmd->dev[0]);
+}
+
 /*
  * Lock/unlock mapping table.
  * The map lock also protects all the zone lists.
@@ -1719,7 +1729,7 @@ again:
                /* Allocate a random zone */
                dzone = dmz_alloc_zone(zmd, DMZ_ALLOC_RND);
                if (!dzone) {
-                       if (dmz_bdev_is_dying(zmd->dev)) {
+                       if (dmz_dev_is_dying(zmd)) {
                                dzone = ERR_PTR(-EIO);
                                goto out;
                        }
@@ -1820,7 +1830,7 @@ again:
        /* Allocate a random zone */
        bzone = dmz_alloc_zone(zmd, DMZ_ALLOC_RND);
        if (!bzone) {
-               if (dmz_bdev_is_dying(zmd->dev)) {
+               if (dmz_dev_is_dying(zmd)) {
                        bzone = ERR_PTR(-EIO);
                        goto out;
                }
index 699c4145306ee43e78f1940a9a87c7e0caed2cf3..5daede0daf923f3546db1eef04ee8ed52bc83c27 100644 (file)
@@ -455,7 +455,7 @@ static void dmz_reclaim_work(struct work_struct *work)
        unsigned int p_unmap_rnd;
        int ret;
 
-       if (dmz_bdev_is_dying(zrc->dev))
+       if (dmz_dev_is_dying(zmd))
                return;
 
        if (!dmz_should_reclaim(zrc)) {
@@ -490,7 +490,7 @@ static void dmz_reclaim_work(struct work_struct *work)
        if (ret) {
                DMDEBUG("(%s): Reclaim error %d\n",
                        dmz_metadata_label(zmd), ret);
-               if (!dmz_check_bdev(zrc->dev))
+               if (!dmz_check_dev(zmd))
                        return;
        }
 
index ba5b8c507c988a33eef19121b189d2c7909859b2..b32e791b8a5c0eef660b2f8e1d7b07e1c1d250a3 100644 (file)
@@ -632,7 +632,7 @@ static int dmz_map(struct dm_target *ti, struct bio *bio)
        sector_t chunk_sector;
        int ret;
 
-       if (dmz_bdev_is_dying(dmz->dev))
+       if (dmz_dev_is_dying(zmd))
                return DM_MAPIO_KILL;
 
        DMDEBUG("(%s): BIO op %d sector %llu + %u => chunk %llu, block %llu, %u blocks",
index dd768dc60341c362f4fe57a40d43f589a8f0e0a0..e0883df8a9030abf397c4ff368974c20afef7574 100644 (file)
@@ -181,6 +181,9 @@ 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);
 
+bool dmz_check_dev(struct dmz_metadata *zmd);
+bool dmz_dev_is_dying(struct dmz_metadata *zmd);
+
 #define DMZ_ALLOC_RND          0x01
 #define DMZ_ALLOC_RECLAIM      0x02