summaryrefslogtreecommitdiffstats
path: root/drivers/block/loop.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/loop.c')
-rw-r--r--drivers/block/loop.c16
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
267static 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
275static int lo_write_bvec(struct file *file, struct bio_vec *bvec, loff_t *ppos) 267static 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;