diff options
Diffstat (limited to 'drivers/block/loop.c')
-rw-r--r-- | drivers/block/loop.c | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index f11b7dc16e9d..44c9985f352a 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c | |||
@@ -264,20 +264,12 @@ lo_do_transfer(struct loop_device *lo, int cmd, | |||
264 | return ret; | 264 | return ret; |
265 | } | 265 | } |
266 | 266 | ||
267 | static inline void loop_iov_iter_bvec(struct iov_iter *i, | ||
268 | unsigned int direction, const struct bio_vec *bvec, | ||
269 | unsigned long nr_segs, size_t count) | ||
270 | { | ||
271 | iov_iter_bvec(i, direction, bvec, nr_segs, count); | ||
272 | i->type |= ITER_BVEC_FLAG_NO_REF; | ||
273 | } | ||
274 | |||
275 | static int lo_write_bvec(struct file *file, struct bio_vec *bvec, loff_t *ppos) | 267 | static int lo_write_bvec(struct file *file, struct bio_vec *bvec, loff_t *ppos) |
276 | { | 268 | { |
277 | struct iov_iter i; | 269 | struct iov_iter i; |
278 | ssize_t bw; | 270 | ssize_t bw; |
279 | 271 | ||
280 | loop_iov_iter_bvec(&i, WRITE, bvec, 1, bvec->bv_len); | 272 | iov_iter_bvec(&i, WRITE, bvec, 1, bvec->bv_len); |
281 | 273 | ||
282 | file_start_write(file); | 274 | file_start_write(file); |
283 | bw = vfs_iter_write(file, &i, ppos, 0); | 275 | bw = vfs_iter_write(file, &i, ppos, 0); |
@@ -355,7 +347,7 @@ static int lo_read_simple(struct loop_device *lo, struct request *rq, | |||
355 | ssize_t len; | 347 | ssize_t len; |
356 | 348 | ||
357 | rq_for_each_segment(bvec, rq, iter) { | 349 | rq_for_each_segment(bvec, rq, iter) { |
358 | loop_iov_iter_bvec(&i, READ, &bvec, 1, bvec.bv_len); | 350 | iov_iter_bvec(&i, READ, &bvec, 1, bvec.bv_len); |
359 | len = vfs_iter_read(lo->lo_backing_file, &i, &pos, 0); | 351 | len = vfs_iter_read(lo->lo_backing_file, &i, &pos, 0); |
360 | if (len < 0) | 352 | if (len < 0) |
361 | return len; | 353 | return len; |
@@ -396,7 +388,7 @@ static int lo_read_transfer(struct loop_device *lo, struct request *rq, | |||
396 | b.bv_offset = 0; | 388 | b.bv_offset = 0; |
397 | b.bv_len = bvec.bv_len; | 389 | b.bv_len = bvec.bv_len; |
398 | 390 | ||
399 | loop_iov_iter_bvec(&i, READ, &b, 1, b.bv_len); | 391 | iov_iter_bvec(&i, READ, &b, 1, b.bv_len); |
400 | len = vfs_iter_read(lo->lo_backing_file, &i, &pos, 0); | 392 | len = vfs_iter_read(lo->lo_backing_file, &i, &pos, 0); |
401 | if (len < 0) { | 393 | if (len < 0) { |
402 | ret = len; | 394 | ret = len; |
@@ -563,7 +555,7 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd, | |||
563 | } | 555 | } |
564 | atomic_set(&cmd->ref, 2); | 556 | atomic_set(&cmd->ref, 2); |
565 | 557 | ||
566 | loop_iov_iter_bvec(&iter, rw, bvec, nr_bvec, blk_rq_bytes(rq)); | 558 | iov_iter_bvec(&iter, rw, bvec, nr_bvec, blk_rq_bytes(rq)); |
567 | iter.iov_offset = offset; | 559 | iter.iov_offset = offset; |
568 | 560 | ||
569 | cmd->iocb.ki_pos = pos; | 561 | cmd->iocb.ki_pos = pos; |