Just return an error from the error targets map function, rather than erroring the buffer_head. --- diff/drivers/md/dm-target.c 2002-12-17 15:59:12.000000000 +0000 +++ source/drivers/md/dm-target.c 2002-12-17 15:59:20.000000000 +0000 @@ -164,8 +164,7 @@ static int io_err_map(struct dm_target *ti, struct buffer_head *bh, int rw) { - buffer_IO_error(bh); - return 0; + return -EIO; } static struct target_type error_target = {