From: Jens Axboe 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 Signed-off-by: Andrew Morton --- 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; } _