Skip to content

Commit 36ffc6c

Browse files
Christoph Hellwigaxboe
authored andcommitted
block_dev: propagate bio_iov_iter_get_pages error in __blkdev_direct_IO
Once we move the block layer to its own status code we'll still want to propagate the bio_iov_iter_get_pages, so restructure __blkdev_direct_IO to take ret into account when returning the errno. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@fb.com>
1 parent d5245d7 commit 36ffc6c

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

fs/block_dev.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages)
334334
bool is_read = (iov_iter_rw(iter) == READ), is_sync;
335335
loff_t pos = iocb->ki_pos;
336336
blk_qc_t qc = BLK_QC_T_NONE;
337-
int ret;
337+
int ret = 0;
338338

339339
if ((pos | iov_iter_alignment(iter)) &
340340
(bdev_logical_block_size(bdev) - 1))
@@ -363,7 +363,7 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages)
363363

364364
ret = bio_iov_iter_get_pages(bio, iter);
365365
if (unlikely(ret)) {
366-
bio->bi_error = ret;
366+
bio->bi_error = -EIO;
367367
bio_endio(bio);
368368
break;
369369
}
@@ -412,7 +412,8 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages)
412412
}
413413
__set_current_state(TASK_RUNNING);
414414

415-
ret = dio->bio.bi_error;
415+
if (!ret)
416+
ret = dio->bio.bi_error;
416417
if (likely(!ret))
417418
ret = dio->size;
418419

0 commit comments

Comments
 (0)