dm: don't grab target io reference in dm_zone_map_bio
authorMing Lei <ming.lei@redhat.com>
Tue, 12 Apr 2022 08:56:14 +0000 (16:56 +0800)
committerMike Snitzer <snitzer@kernel.org>
Thu, 5 May 2022 21:31:36 +0000 (17:31 -0400)
dm_zone_map_bio() is only called from __map_bio in which the io's
reference is grabbed already, and the reference won't be released
until the bio is submitted, so not necessary to do it dm_zone_map_bio
any more.

Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
drivers/md/dm-core.h
drivers/md/dm-zone.c
drivers/md/dm.c

index 37ddedf6124965b08f7e861a83583aa8e091df71..d2d188c9b632a7dd045900885a7684028f3f6261 100644 (file)
@@ -296,13 +296,6 @@ static inline void dm_io_set_flag(struct dm_io *io, unsigned int bit)
        io->flags |= (1U << bit);
 }
 
-static inline void dm_io_inc_pending(struct dm_io *io)
-{
-       atomic_inc(&io->io_count);
-}
-
-void dm_io_dec_pending(struct dm_io *io, blk_status_t error);
-
 static inline struct completion *dm_get_completion_from_kobject(struct kobject *kobj)
 {
        return &container_of(kobj, struct dm_kobject_holder, kobj)->completion;
index 57daa86c19cf0eb4bf7d12c2f3d05e2d09f67db2..3e7b1fe1580b90173411aefd0c1b64b731d4e7ff 100644 (file)
@@ -550,13 +550,6 @@ int dm_zone_map_bio(struct dm_target_io *tio)
                return DM_MAPIO_KILL;
        }
 
-       /*
-        * The target map function may issue and complete the IO quickly.
-        * Take an extra reference on the IO to make sure it does disappear
-        * until we run dm_zone_map_bio_end().
-        */
-       dm_io_inc_pending(io);
-
        /* Let the target do its work */
        r = ti->type->map(ti, clone);
        switch (r) {
@@ -587,9 +580,6 @@ int dm_zone_map_bio(struct dm_target_io *tio)
                break;
        }
 
-       /* Drop the extra reference on the IO */
-       dm_io_dec_pending(io, sts);
-
        if (sts != BLK_STS_OK)
                return DM_MAPIO_KILL;
 
index 7a1a83b58677663b69094c7538e759a152888241..7cae8235fbe1ead1bb0984d55fea9ff4415bc310 100644 (file)
@@ -955,6 +955,11 @@ static void dm_io_complete(struct dm_io *io)
        }
 }
 
+static void dm_io_inc_pending(struct dm_io *io)
+{
+       atomic_inc(&io->io_count);
+}
+
 /*
  * Decrements the number of outstanding ios that a bio has been
  * cloned into, completing the original io if necc.
@@ -978,7 +983,7 @@ static void dm_io_set_error(struct dm_io *io, blk_status_t error)
        spin_unlock_irqrestore(&io->lock, flags);
 }
 
-void dm_io_dec_pending(struct dm_io *io, blk_status_t error)
+static void dm_io_dec_pending(struct dm_io *io, blk_status_t error)
 {
        if (unlikely(error))
                dm_io_set_error(io, error);