In __map_bio(), if the target returns an error while mapping the I/O, the cloned bio needs to be freed. --- diff/drivers/md/dm.c 2004-05-19 22:11:47.000000000 +0100 +++ source/drivers/md/dm.c 2004-05-27 14:22:22.000000000 +0100 @@ -369,6 +369,7 @@ struct dm_io *io = tio->io; free_tio(tio->io->md, tio); dec_pending(io, -EIO); + bio_put(clone); } }