Loading drivers/md/dm-core.h +6 −0 Original line number Diff line number Diff line Loading @@ -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. Loading drivers/md/dm.c +5 −13 Original line number Diff line number Diff line Loading @@ -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))) 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); Loading Loading @@ -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. Loading Loading
drivers/md/dm-core.h +6 −0 Original line number Diff line number Diff line Loading @@ -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. Loading
drivers/md/dm.c +5 −13 Original line number Diff line number Diff line Loading @@ -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))) 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); Loading Loading @@ -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. Loading