dm-clone increments ios_in_flight before mapping a bio. When the target is in fail mode, map() returns DM_MAPIO_KILL and the device-mapper core completes the bio without calling the target end_io hook.
That leaves ios_in_flight permanently elevated for each killed bio. The target can then wait for in-flight I/O that will never complete. Drop the ios_in_flight reference before returning DM_MAPIO_KILL from the fail-mode path. Assisted-by: Codex:gpt-5.5-cyber-preview Signed-off-by: Samuel Moelius <[email protected]> --- drivers/md/dm-clone-target.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/md/dm-clone-target.c b/drivers/md/dm-clone-target.c index c0f9b93983d4..701e03dc2685 100644 --- a/drivers/md/dm-clone-target.c +++ b/drivers/md/dm-clone-target.c @@ -1316,11 +1316,11 @@ static int clone_map(struct dm_target *ti, struct bio *bio) struct clone *clone = ti->private; unsigned long region_nr; - atomic_inc(&clone->ios_in_flight); - if (unlikely(get_clone_mode(clone) == CM_FAIL)) return DM_MAPIO_KILL; + atomic_inc(&clone->ios_in_flight); + /* * REQ_PREFLUSH bios carry no data: * -- 2.43.0

