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-09 21:33:10.000000000 -0500 +++ source/drivers/md/dm.c 2004-05-19 12:17:56.000000000 -0500 @@ -369,6 +369,7 @@ struct dm_io *io = tio->io; free_tio(tio->io->md, tio); dec_pending(io, -EIO); + bio_put(clone); } }