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 = {
