summaryrefslogtreecommitdiff
path: root/drivers/md
diff options
context:
space:
mode:
authorMike Snitzer <snitzer@kernel.org>2022-03-25 21:12:47 +0300
committerMike Snitzer <snitzer@kernel.org>2022-05-06 00:31:34 +0300
commit3b03f7c1242c754f0c474b37eec7d79107b9f375 (patch)
tree7f9f9f10e9b34539382daa24b4f8404b09608283 /drivers/md
parent4857abf66434d96dec1a9209bbfbf55e2ee359fa (diff)
downloadlinux-3b03f7c1242c754f0c474b37eec7d79107b9f375.tar.xz
dm: simplify dm_start_io_acct
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>
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/dm-core.h6
-rw-r--r--drivers/md/dm.c18
2 files changed, 11 insertions, 13 deletions
diff --git a/drivers/md/dm-core.h b/drivers/md/dm-core.h
index 4277853c7535..db069fa9cee5 100644
--- a/drivers/md/dm-core.h
+++ b/drivers/md/dm-core.h
@@ -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.
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 71357592646a..e6b6fe03dbcf 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -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.