Now that io splitting is recorded prior to, or during, ->map IO
accounting can happen immediately rather than defer until after
bio splitting in dm_split_and_process_bio().

Remove the DM_IO_START_ACCT flag and also remove dm_io's map_task
member because there is no longer any need to wait for splitting to
occur before accounting.

Also move dm_io struct's 'flags' member to consolidate struct holes.

Signed-off-by: Mike Snitzer <[email protected]>
---
 drivers/md/dm-core.h |  6 +-----
 drivers/md/dm.c      | 34 +++++-----------------------------
 2 files changed, 6 insertions(+), 34 deletions(-)

diff --git a/drivers/md/dm-core.h b/drivers/md/dm-core.h
index f3cfc7affd12..d21648a923ea 100644
--- a/drivers/md/dm-core.h
+++ b/drivers/md/dm-core.h
@@ -255,15 +255,12 @@ static inline bool dm_tio_is_normal(struct dm_target_io 
*tio)
 #define DM_IO_MAGIC 19577
 struct dm_io {
        unsigned short magic;
-
+       blk_short_t flags;
        spinlock_t lock;
        unsigned long start_time;
        void *data;
        struct dm_io *next;
-       struct task_struct *map_task;
        struct dm_stats_aux stats_aux;
-
-       blk_short_t flags;
        blk_status_t status;
        atomic_t io_count;
        struct mapped_device *md;
@@ -281,7 +278,6 @@ struct dm_io {
  * dm_io flags
  */
 enum {
-       DM_IO_START_ACCT,
        DM_IO_ACCOUNTED,
        DM_IO_WAS_SPLIT
 };
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index c5a79712de1d..3b87d151ef88 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -596,7 +596,6 @@ static struct dm_io *alloc_io(struct mapped_device *md, 
struct bio *bio)
        this_cpu_inc(*md->pending_io);
        io->orig_bio = bio;
        io->md = md;
-       io->map_task = current;
        spin_lock_init(&io->lock);
        io->start_time = jiffies;
        io->flags = 0;
@@ -1242,13 +1241,6 @@ void dm_accept_partial_bio(struct bio *bio, unsigned 
n_sectors)
 }
 EXPORT_SYMBOL_GPL(dm_accept_partial_bio);
 
-static inline void __dm_submit_bio_remap(struct bio *clone,
-                                        dev_t dev, sector_t old_sector)
-{
-       trace_block_bio_remap(clone, dev, old_sector);
-       submit_bio_noacct(clone);
-}
-
 /*
  * @clone: clone bio that DM core passed to target's .map function
  * @tgt_clone: clone of @clone bio that target needs submitted
@@ -1263,8 +1255,6 @@ void dm_submit_bio_remap(struct bio *clone, struct bio 
*tgt_clone)
        struct dm_target_io *tio = clone_to_tio(clone);
        struct dm_io *io = tio->io;
 
-       WARN_ON_ONCE(!tio->ti->accounts_remapped_io);
-
        /* establish bio that will get submitted */
        if (!tgt_clone)
                tgt_clone = clone;
@@ -1273,15 +1263,11 @@ void dm_submit_bio_remap(struct bio *clone, struct bio 
*tgt_clone)
         * Account io->origin_bio to DM dev on behalf of target
         * that took ownership of IO with DM_MAPIO_SUBMITTED.
         */
-       if (io->map_task == current) {
-               /* Still in target's map function */
-               dm_io_set_flag(io, DM_IO_START_ACCT);
-       } else {
-               dm_start_io_acct(io, clone);
-       }
+       dm_start_io_acct(io, clone);
 
-       __dm_submit_bio_remap(tgt_clone, disk_devt(io->md->disk),
+       trace_block_bio_remap(tgt_clone, disk_devt(io->md->disk),
                              tio->old_sector);
+       submit_bio_noacct(tgt_clone);
 }
 EXPORT_SYMBOL_GPL(dm_submit_bio_remap);
 
@@ -1341,16 +1327,10 @@ static void __map_bio(struct bio *clone)
        case DM_MAPIO_SUBMITTED:
                /* target has assumed ownership of this io */
                if (!ti->accounts_remapped_io)
-                       dm_io_set_flag(io, DM_IO_START_ACCT);
+                       dm_start_io_acct(io, clone);
                break;
        case DM_MAPIO_REMAPPED:
-               /*
-                * the bio has been remapped so dispatch it, but defer
-                * dm_start_io_acct() until after possible bio_split().
-                */
-               __dm_submit_bio_remap(clone, disk_devt(md->disk),
-                                     tio->old_sector);
-               dm_io_set_flag(io, DM_IO_START_ACCT);
+               dm_submit_bio_remap(clone, NULL);
                break;
        case DM_MAPIO_KILL:
        case DM_MAPIO_REQUEUE:
@@ -1668,7 +1648,6 @@ static void dm_split_and_process_bio(struct mapped_device 
*md,
        }
 
        error = __split_and_process_bio(&ci);
-       io->map_task = NULL;
        if (error || !ci.sector_count)
                goto out;
        /*
@@ -1680,9 +1659,6 @@ static void dm_split_and_process_bio(struct mapped_device 
*md,
        bio_inc_remaining(bio);
        submit_bio_noacct(bio);
 out:
-       if (dm_io_flagged(io, DM_IO_START_ACCT))
-               dm_start_io_acct(io, NULL);
-
        /*
         * Drop the extra reference count for non-POLLED bio, and hold one
         * reference for POLLED bio, which will be released in dm_poll_bio
-- 
2.15.0

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

Reply via email to