linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ming Lei <ming.lei@redhat.com>
To: Jens Axboe <axboe@fb.com>, Christoph Hellwig <hch@infradead.org>,
	Kent Overstreet <kent.overstreet@gmail.com>
Cc: David Sterba <dsterba@suse.cz>, Huang Ying <ying.huang@intel.com>,
	Mike Snitzer <snitzer@redhat.com>,
	linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
	Theodore Ts'o <tytso@mit.edu>,
	"Darrick J . Wong" <darrick.wong@oracle.com>,
	Coly Li <colyli@suse.de>, Filipe Manana <fdmanana@gmail.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	Ming Lei <ming.lei@redhat.com>
Subject: [PATCH V7 19/24] block: loop: pass multipage bvec to iov_iter
Date: Wed, 27 Jun 2018 20:45:43 +0800	[thread overview]
Message-ID: <20180627124548.3456-20-ming.lei@redhat.com> (raw)
In-Reply-To: <20180627124548.3456-1-ming.lei@redhat.com>

iov_iter is implemented with bvec itererator, so it is safe to pass
multipage bvec to it, and this way is much more efficient than
passing one page in each bvec.

Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
 drivers/block/loop.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index d6b6f434fd4b..a350b323e891 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -515,16 +515,16 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd,
 	struct bio *bio = rq->bio;
 	struct file *file = lo->lo_backing_file;
 	unsigned int offset;
-	int segments = 0;
+	int nr_bvec = 0;
 	int ret;
 
 	if (rq->bio != rq->biotail) {
-		struct req_iterator iter;
+		struct bvec_iter iter;
 		struct bio_vec tmp;
 
 		__rq_for_each_bio(bio, rq)
-			segments += bio_segments(bio);
-		bvec = kmalloc_array(segments, sizeof(struct bio_vec),
+			nr_bvec += bio_bvecs(bio);
+		bvec = kmalloc_array(nr_bvec, sizeof(struct bio_vec),
 				     GFP_NOIO);
 		if (!bvec)
 			return -EIO;
@@ -533,13 +533,14 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd,
 		/*
 		 * The bios of the request may be started from the middle of
 		 * the 'bvec' because of bio splitting, so we can't directly
-		 * copy bio->bi_iov_vec to new bvec. The rq_for_each_segment
+		 * copy bio->bi_iov_vec to new bvec. The bio_for_each_bvec
 		 * API will take care of all details for us.
 		 */
-		rq_for_each_segment(tmp, rq, iter) {
-			*bvec = tmp;
-			bvec++;
-		}
+		__rq_for_each_bio(bio, rq)
+			bio_for_each_bvec(tmp, bio, iter) {
+				*bvec = tmp;
+				bvec++;
+			}
 		bvec = cmd->bvec;
 		offset = 0;
 	} else {
@@ -550,12 +551,11 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd,
 		 */
 		offset = bio->bi_iter.bi_bvec_done;
 		bvec = __bvec_iter_bvec(bio->bi_io_vec, bio->bi_iter);
-		segments = bio_segments(bio);
+		nr_bvec = bio_bvecs(bio);
 	}
 	atomic_set(&cmd->ref, 2);
 
-	iov_iter_bvec(&iter, ITER_BVEC | rw, bvec,
-		      segments, blk_rq_bytes(rq));
+	iov_iter_bvec(&iter, ITER_BVEC | rw, bvec, nr_bvec, blk_rq_bytes(rq));
 	iter.iov_offset = offset;
 
 	cmd->iocb.ki_pos = pos;
-- 
2.9.5

  parent reply	other threads:[~2018-06-27 12:45 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-27 12:45 [PATCH V7 00/24] block: support multipage bvec Ming Lei
2018-06-27 12:45 ` [PATCH V7 01/24] dm: use bio_split() when splitting out the already processed bio Ming Lei
2018-06-27 13:17   ` Mike Snitzer
2018-06-27 12:45 ` [PATCH V7 02/24] bcache: don't clone bio in bch_data_verify Ming Lei
2018-06-27 12:45 ` [PATCH V7 03/24] exofs: use bio_clone_fast in _write_mirror Ming Lei
2018-06-27 12:45 ` [PATCH V7 04/24] block: remove bio_clone_kmalloc Ming Lei
2018-06-27 12:45 ` [PATCH V7 05/24] md: remove a bogus comment Ming Lei
2018-06-27 12:45 ` [PATCH V7 06/24] block: unexport bio_clone_bioset Ming Lei
2018-06-27 12:45 ` [PATCH V7 07/24] block: simplify bio_check_pages_dirty Ming Lei
2018-06-27 12:45 ` [PATCH V7 08/24] block: bio_set_pages_dirty can't see NULL bv_page in a valid bio_vec Ming Lei
2018-06-27 12:45 ` [PATCH V7 09/24] block: use bio_add_page in bio_iov_iter_get_pages Ming Lei
2018-06-27 12:45 ` [PATCH V7 10/24] block: introduce multipage page bvec helpers Ming Lei
2018-06-27 15:59   ` kbuild test robot
2018-11-09 11:15     ` Ming Lei
2018-06-27 12:45 ` [PATCH V7 11/24] block: introduce bio_for_each_bvec() Ming Lei
2018-06-27 12:45 ` [PATCH V7 12/24] block: use bio_for_each_bvec() to compute multipage bvec count Ming Lei
2018-06-27 12:45 ` [PATCH V7 13/24] block: use bio_for_each_bvec() to map sg Ming Lei
2018-06-27 12:45 ` [PATCH V7 14/24] block: introduce bvec_last_segment() Ming Lei
2018-06-27 12:45 ` [PATCH V7 15/24] fs/buffer.c: use bvec iterator to truncate the bio Ming Lei
2018-06-27 12:45 ` [PATCH V7 16/24] btrfs: use bvec_last_segment to get bio's last page Ming Lei
2018-06-27 12:45 ` [PATCH V7 17/24] btrfs: move bio_pages_all() to btrfs Ming Lei
2018-06-27 12:45 ` [PATCH V7 18/24] block: introduce bio_bvecs() Ming Lei
2018-06-27 12:45 ` Ming Lei [this message]
2018-06-27 12:45 ` [PATCH V7 20/24] bcache: avoid to use bio_for_each_segment_all() in bch_bio_alloc_pages() Ming Lei
2018-06-27 15:55   ` Coly Li
2018-06-28  1:28     ` Ming Lei
2018-06-28  2:01       ` Coly Li
2018-06-27 12:45 ` [PATCH V7 21/24] block: allow bio_for_each_segment_all() to iterate over multipage bvec Ming Lei
2018-06-27 12:45 ` [PATCH V7 22/24] block: enable multipage bvecs Ming Lei
2018-06-27 12:45 ` [PATCH V7 23/24] block: always define BIO_MAX_PAGES as 256 Ming Lei
2018-06-27 12:45 ` [PATCH V7 24/24] block: document usage of bio iterator helpers Ming Lei
2018-06-27 18:13   ` Randy Dunlap

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180627124548.3456-20-ming.lei@redhat.com \
    --to=ming.lei@redhat.com \
    --cc=axboe@fb.com \
    --cc=colyli@suse.de \
    --cc=darrick.wong@oracle.com \
    --cc=dsterba@suse.cz \
    --cc=fdmanana@gmail.com \
    --cc=hch@infradead.org \
    --cc=kent.overstreet@gmail.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=rdunlap@infradead.org \
    --cc=snitzer@redhat.com \
    --cc=tytso@mit.edu \
    --cc=ying.huang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).