Just return an error from the error targets map function, rather than erroring the buffer_head. --- diff/drivers/md/dm-target.c 2003-06-17 10:06:24.000000000 +0100 +++ source/drivers/md/dm-target.c 2003-06-17 10:06:29.000000000 +0100 @@ -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 = {