diff options
Diffstat (limited to 'drivers/block/loop.c')
-rw-r--r-- | drivers/block/loop.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 423f4ca7d712..80cf8add46ff 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c | |||
@@ -488,6 +488,12 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd, | |||
488 | bvec = __bvec_iter_bvec(bio->bi_io_vec, bio->bi_iter); | 488 | bvec = __bvec_iter_bvec(bio->bi_io_vec, bio->bi_iter); |
489 | iov_iter_bvec(&iter, ITER_BVEC | rw, bvec, | 489 | iov_iter_bvec(&iter, ITER_BVEC | rw, bvec, |
490 | bio_segments(bio), blk_rq_bytes(cmd->rq)); | 490 | bio_segments(bio), blk_rq_bytes(cmd->rq)); |
491 | /* | ||
492 | * This bio may be started from the middle of the 'bvec' | ||
493 | * because of bio splitting, so offset from the bvec must | ||
494 | * be passed to iov iterator | ||
495 | */ | ||
496 | iter.iov_offset = bio->bi_iter.bi_bvec_done; | ||
491 | 497 | ||
492 | cmd->iocb.ki_pos = pos; | 498 | cmd->iocb.ki_pos = pos; |
493 | cmd->iocb.ki_filp = file; | 499 | cmd->iocb.ki_filp = file; |