Just return an error from the error targets map function, rather than erroring the buffer_head. --- diff/drivers/md/dm-target.c 2003-01-10 10:19:46.000000000 +0000 +++ source/drivers/md/dm-target.c 2003-01-10 10:20:03.000000000 +0000 @@ -161,8 +161,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 = {