

This function doesn't correctly accumulate -EIO for its caller.


---

 25-akpm/fs/direct-io.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletion(-)

diff -puN fs/direct-io.c~dio_bio_reap-retval-fix fs/direct-io.c
--- 25/fs/direct-io.c~dio_bio_reap-retval-fix	Thu Apr 22 14:43:49 2004
+++ 25-akpm/fs/direct-io.c	Thu Apr 22 14:44:17 2004
@@ -446,12 +446,15 @@ static int dio_bio_reap(struct dio *dio)
 		while (dio->bio_list) {
 			unsigned long flags;
 			struct bio *bio;
+			int ret2;
 
 			spin_lock_irqsave(&dio->bio_lock, flags);
 			bio = dio->bio_list;
 			dio->bio_list = bio->bi_private;
 			spin_unlock_irqrestore(&dio->bio_lock, flags);
-			ret = dio_bio_complete(dio, bio);
+			ret2 = dio_bio_complete(dio, bio);
+			if (ret == 0)
+				ret = ret2;
 		}
 		dio->reap_counter = 0;
 	}

_
