dm: simplify dm_start_io_acct
authorMike Snitzer <snitzer@kernel.org>
Fri, 25 Mar 2022 18:12:47 +0000 (14:12 -0400)
committerMike Snitzer <snitzer@kernel.org>
Thu, 5 May 2022 21:31:34 +0000 (17:31 -0400)
Pull common DM_IO_ACCOUNTED check out to beginning of dm_start_io_acct.
Also, use dm_tio_is_normal (and move it to dm-core.h).

Signed-off-by: Mike Snitzer <snitzer@kernel.org>
drivers/md/dm-core.h
drivers/md/dm.c

index 4277853c753515135c90391be507599cd827f573..db069fa9cee5304030ae695d5dfa5d376d9d1af7 100644 (file)
@@ -237,6 +237,12 @@ static inline void dm_tio_set_flag(struct dm_target_io *tio, unsigned int bit)
        tio->flags |= (1U << bit);
 }
 
+static inline bool dm_tio_is_normal(struct dm_target_io *tio)
+{
+       return (dm_tio_flagged(tio, DM_TIO_INSIDE_DM_IO) &&
+               !dm_tio_flagged(tio, DM_TIO_IS_DUPLICATE_BIO));
+}
+
 /*
  * One of these is allocated per original bio.
  * It contains the first clone used for that original.
index 71357592646a1152ce6f4a24f532200435fe05ec..e6b6fe03dbcfdb4f6bb04d8560248f3514c493e5 100644 (file)
@@ -538,17 +538,15 @@ static void dm_start_io_acct(struct dm_io *io, struct bio *clone)
 
        /*
         * Ensure IO accounting is only ever started once.
-        * Expect no possibility for race unless DM_TIO_IS_DUPLICATE_BIO.
         */
-       if (!clone ||
-           likely(!dm_tio_flagged(clone_to_tio(clone), DM_TIO_IS_DUPLICATE_BIO))) {
-               if (WARN_ON_ONCE(dm_io_flagged(io, DM_IO_ACCOUNTED)))
-                       return;
+       if (dm_io_flagged(io, DM_IO_ACCOUNTED))
+               return;
+
+       /* Expect no possibility for race unless DM_TIO_IS_DUPLICATE_BIO. */
+       if (!clone || likely(dm_tio_is_normal(clone_to_tio(clone)))) {
                dm_io_set_flag(io, DM_IO_ACCOUNTED);
        } else {
                unsigned long flags;
-               if (dm_io_flagged(io, DM_IO_ACCOUNTED))
-                       return;
                /* Can afford locking given DM_TIO_IS_DUPLICATE_BIO */
                spin_lock_irqsave(&io->lock, flags);
                dm_io_set_flag(io, DM_IO_ACCOUNTED);
@@ -923,12 +921,6 @@ static void dm_io_complete(struct dm_io *io)
        }
 }
 
-static inline bool dm_tio_is_normal(struct dm_target_io *tio)
-{
-       return (dm_tio_flagged(tio, DM_TIO_INSIDE_DM_IO) &&
-               !dm_tio_flagged(tio, DM_TIO_IS_DUPLICATE_BIO));
-}
-
 /*
  * Decrements the number of outstanding ios that a bio has been
  * cloned into, completing the original io if necc.