From: Jens Axboe <axboe@suse.de>

For requests marked read-ahead, it can legitimately fail without it being a
path problem.  So don't fail a path just because this happens (can be the
atomic request allocation going nuts, for instance), or all paths will quickly
go away.

Signed-off-by: Jens Axboe <axboe@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/md/multipath.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff -puN drivers/md/multipath.c~2-2-md-multipathing-fixes drivers/md/multipath.c
--- 25/drivers/md/multipath.c~2-2-md-multipathing-fixes	2004-08-04 23:30:38.171126592 -0700
+++ 25-akpm/drivers/md/multipath.c	2004-08-04 23:30:38.175125984 -0700
@@ -120,7 +120,7 @@ int multipath_end_request(struct bio *bi
 
 	if (uptodate)
 		multipath_end_bh_io(mp_bh, uptodate);
-	else {
+	else if (!bio_rw_ahead(bio)) {
 		/*
 		 * oops, IO error:
 		 */
@@ -130,7 +130,8 @@ int multipath_end_request(struct bio *bi
 		       bdevname(rdev->bdev,b), 
 		       (unsigned long long)bio->bi_sector);
 		multipath_reschedule_retry(mp_bh);
-	}
+	} else
+		multipath_end_bh_io(mp_bh, 0);
 	rdev_dec_pending(rdev, conf->mddev);
 	return 0;
 }
_