Browse Source

[PATCH] __blk_rq_unmap_user() fails to return error

If the bio is user copied, the copy back could return -EFAULT. Make
sure we return any error seen during unmapping.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe 18 years ago
parent
commit
48785bb9fa
1 changed files with 7 additions and 2 deletions
  1. 7 2
      block/ll_rw_blk.c

+ 7 - 2
block/ll_rw_blk.c

@@ -2504,6 +2504,7 @@ EXPORT_SYMBOL(blk_rq_map_user_iov);
 int blk_rq_unmap_user(struct request *rq)
 {
 	struct bio *bio, *mapped_bio;
+	int ret = 0, ret2;
 
 	while ((bio = rq->bio)) {
 		if (bio_flagged(bio, BIO_BOUNCED))
@@ -2511,11 +2512,15 @@ int blk_rq_unmap_user(struct request *rq)
 		else
 			mapped_bio = bio;
 
-		__blk_rq_unmap_user(mapped_bio);
+		ret2 = __blk_rq_unmap_user(mapped_bio);
+		if (ret2 && !ret)
+			ret = ret2;
+
 		rq->bio = bio->bi_next;
 		bio_put(bio);
 	}
-	return 0;
+
+	return ret;
 }
 
 EXPORT_SYMBOL(blk_rq_unmap_user);