Error handler default is to retry - else use DM_ERROR_IO.
Rename error handler to dm_scsi_err_handler.
--- diff/drivers/md/dm-hw-handler.c	2004-10-29 15:38:04.000000000 +0100
+++ source/drivers/md/dm-hw-handler.c	2004-10-29 15:39:07.000000000 +0100
@@ -149,7 +149,7 @@
 	return 0;
 }
 
-unsigned dm_hw_handler_err(struct hw_handler *hwh, struct bio *bio)
+unsigned dm_scsi_err_handler(struct hw_handler *hwh, struct bio *bio)
 {
 	int sense_key, asc, ascq;
 
@@ -173,7 +173,7 @@
 		case 0x0d:	/* volume overflow */
 		case 0x0e:	/* data miscompare */
 		case 0x0f:	/* reserved - no idea either. */
-			return 0;
+			return MP_ERROR_IO;
 
 			/* For these errors it's unclear whether they
 			 * come from the device or the controller.
@@ -184,14 +184,14 @@
 		case 0x04:	/* Hardware error */
 		case 0x09:	/* vendor specific */
 		case 0x0b:	/* Aborted command */
-			return MP_FAIL_PATH | MP_RETRY_IO;
+			return MP_FAIL_PATH;
 
 		case 0x06:	/* Unit attention - might want to decode */
 			if (asc == 0x04 && ascq == 0x01)
 				/* "Unit in the process of
 				 * becoming ready" */
-				return MP_RETRY_IO;
-			return MP_FAIL_PATH | MP_RETRY_IO;
+				return 0;
+			return MP_FAIL_PATH;
 
 			/* FIXME: For Unit Not Ready we may want
 			 * to have a generic pg activation
@@ -201,16 +201,16 @@
 			 * error path? I don't think so. */
 		case 0x00:	/* No sense */
 		case 0x01:	/* Recovered error */
-			return MP_RETRY_IO;
+			return 0;
 		}
 	}
 #endif
 
 	/* We got no idea how to decode the other kinds of errors ->
 	 * assume generic error condition. */
-	return MP_FAIL_PATH | MP_RETRY_IO;
+	return MP_FAIL_PATH;
 }
 
 EXPORT_SYMBOL(dm_register_hw_handler);
 EXPORT_SYMBOL(dm_unregister_hw_handler);
-EXPORT_SYMBOL(dm_hw_handler_err);
+EXPORT_SYMBOL(dm_scsi_err_handler);
--- diff/drivers/md/dm-hw-handler.h	2004-10-29 15:38:42.000000000 +0100
+++ source/drivers/md/dm-hw-handler.h	2004-10-29 15:39:07.000000000 +0100
@@ -58,7 +58,7 @@
 void dm_put_hw_handler(struct hw_handler_type *hwht);
 
 /* Default hwh_err_fn */
-unsigned dm_hw_handler_err(struct hw_handler *hwh, struct bio *bio);
+unsigned dm_scsi_err_handler(struct hw_handler *hwh, struct bio *bio);
 
 /* Callback for hwh_pg_init_fn to use when complete */
 void dm_pg_init_complete(struct path *path, unsigned err_flags);
@@ -66,7 +66,7 @@
 /* hwh_err_fn return flags */
 #define MP_FAIL_PATH 1
 #define MP_BYPASS_PG 2
-#define MP_RETRY_IO  4
+#define MP_ERROR_IO  4	/* Don't retry this I/O */
 
 /* hwh_pg_init_fn return values */
 #define MP_PG_INITIALISING 1
--- diff/drivers/md/dm-mpath.c	2004-10-29 15:39:01.000000000 +0100
+++ source/drivers/md/dm-mpath.c	2004-10-29 15:39:07.000000000 +0100
@@ -766,7 +766,7 @@
 		if (err_flags & MP_BYPASS_PG)
 			bypass_pg(m, mpio->path->pg, 1);
 
-		if (!(err_flags & MP_RETRY_IO))
+		if (err_flags & MP_ERROR_IO)
 			return -EIO;
 
 		dm_bio_restore(&mpio->details, bio);
