mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Kent Overstreet <koverstreet@google.com>
To: axboe@kernel.dk, linux-kernel@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, dm-devel@vger.kernel.org
Cc: tj@kernel.org, neilb@suse.de,
	Kent Overstreet <koverstreet@google.com>,
	Sage Weil <sage@inktank.com>,
	ceph-devel@vger.kernel.org
Subject: [PATCH 13/22] ceph: Convert to bvec_iter
Date: Wed, 27 Mar 2013 10:39:43 -0700	[thread overview]
Message-ID: <1364405992-28424-14-git-send-email-koverstreet@google.com> (raw)
In-Reply-To: <1364405992-28424-1-git-send-email-koverstreet@google.com>

Use new primitives which respect bi_bvec_done.

Signed-off-by: Kent Overstreet <koverstreet@google.com>
Cc: Sage Weil <sage@inktank.com>
Cc: ceph-devel@vger.kernel.org
---
 include/linux/ceph/messenger.h |  3 ++-
 net/ceph/messenger.c           | 53 ++++++++++++++++++++++--------------------
 2 files changed, 30 insertions(+), 26 deletions(-)

diff --git a/include/linux/ceph/messenger.h b/include/linux/ceph/messenger.h
index 60903e0..dccf497 100644
--- a/include/linux/ceph/messenger.h
+++ b/include/linux/ceph/messenger.h
@@ -1,6 +1,7 @@
 #ifndef __FS_CEPH_MESSENGER_H
 #define __FS_CEPH_MESSENGER_H
 
+#include <linux/blk_types.h>
 #include <linux/kref.h>
 #include <linux/mutex.h>
 #include <linux/net.h>
@@ -86,7 +87,7 @@ struct ceph_msg {
 #ifdef CONFIG_BLOCK
 	struct bio  *bio;		/* instead of pages/pagelist */
 	struct bio  *bio_iter;		/* bio iterator */
-	int bio_seg;			/* current bio segment */
+	struct bvec_iter bvec_iter;	/* current bio segment */
 #endif /* CONFIG_BLOCK */
 	struct ceph_pagelist *trail;	/* the trailing part of the data */
 	bool front_is_vmalloc;
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index 0c102ec..ee88ae4 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -697,27 +697,30 @@ static void con_out_kvec_add(struct ceph_connection *con,
 }
 
 #ifdef CONFIG_BLOCK
-static void init_bio_iter(struct bio *bio, struct bio **iter, int *seg)
+static void init_bio_iter(struct bio *bio, struct bio **iter,
+			  struct bvec_iter *bvec_iter)
 {
 	if (!bio) {
 		*iter = NULL;
-		*seg = 0;
 		return;
 	}
 	*iter = bio;
-	*seg = bio->bi_iter.bi_idx;
+	*bvec_iter = bio->bi_iter;
 }
 
-static void iter_bio_next(struct bio **bio_iter, int *seg)
+static void iter_bio_next(struct bio **bio_iter, struct bvec_iter *bvec_iter)
 {
+	struct bio_vec bv;
+
 	if (*bio_iter == NULL)
 		return;
 
-	BUG_ON(*seg >= (*bio_iter)->bi_vcnt);
+	BUG_ON(!bvec_iter->bi_size);
+	bv = bio_iovec_iter(*bio_iter, *bvec_iter);
 
-	(*seg)++;
-	if (*seg == (*bio_iter)->bi_vcnt)
-		init_bio_iter((*bio_iter)->bi_next, bio_iter, seg);
+	bio_advance_iter(*bio_iter, bvec_iter, bv.bv_len);
+	if (!bvec_iter->bi_size)
+		init_bio_iter((*bio_iter)->bi_next, bio_iter, bvec_iter);
 }
 #endif
 
@@ -736,7 +739,7 @@ static void prepare_write_message_data(struct ceph_connection *con)
 		con->out_msg_pos.page_pos = 0;
 #ifdef CONFIG_BLOCK
 	if (msg->bio)
-		init_bio_iter(msg->bio, &msg->bio_iter, &msg->bio_seg);
+		init_bio_iter(msg->bio, &msg->bio_iter, &msg->bvec_iter);
 #endif
 	con->out_msg_pos.data_pos = 0;
 	con->out_msg_pos.did_page_crc = false;
@@ -1047,7 +1050,7 @@ static void out_msg_pos_next(struct ceph_connection *con, struct page *page,
 			       &msg->pagelist->head);
 #ifdef CONFIG_BLOCK
 	else if (msg->bio)
-		iter_bio_next(&msg->bio_iter, &msg->bio_seg);
+		iter_bio_next(&msg->bio_iter, &msg->bvec_iter);
 #endif
 }
 
@@ -1103,12 +1106,12 @@ static int write_partial_msg_pages(struct ceph_connection *con)
 						struct page, lru);
 #ifdef CONFIG_BLOCK
 		} else if (msg->bio) {
-			struct bio_vec *bv;
+			struct bio_vec bv;
 
-			bv = bio_iovec_idx(msg->bio_iter, msg->bio_seg);
-			page = bv->bv_page;
-			bio_offset = bv->bv_offset;
-			max_write = bv->bv_len;
+			bv = bio_iovec_iter(msg->bio_iter, msg->bvec_iter);
+			page = bv.bv_page;
+			bio_offset = bv.bv_offset;
+			max_write = bv.bv_len;
 #endif
 		} else {
 			page = zero_page;
@@ -1818,17 +1821,18 @@ static int read_partial_message_pages(struct ceph_connection *con,
 
 #ifdef CONFIG_BLOCK
 static int read_partial_message_bio(struct ceph_connection *con,
-				    struct bio **bio_iter, int *bio_seg,
+				    struct bio **bio_iter,
+				    struct bvec_iter *bvec_iter,
 				    unsigned int data_len, bool do_datacrc)
 {
-	struct bio_vec *bv = bio_iovec_idx(*bio_iter, *bio_seg);
+	struct bio_vec bv = bio_iovec_iter(*bio_iter, *bvec_iter);
 	void *p;
 	int ret, left;
 
 	left = min((int)(data_len - con->in_msg_pos.data_pos),
-		   (int)(bv->bv_len - con->in_msg_pos.page_pos));
+		   (int)(bv.bv_len - con->in_msg_pos.page_pos));
 
-	p = kmap(bv->bv_page) + bv->bv_offset;
+	p = kmap(bv.bv_page) + bv.bv_offset;
 
 	ret = ceph_tcp_recvmsg(con->sock, p + con->in_msg_pos.page_pos,
 			       left);
@@ -1836,14 +1840,14 @@ static int read_partial_message_bio(struct ceph_connection *con,
 		con->in_data_crc =
 			crc32c(con->in_data_crc,
 				  p + con->in_msg_pos.page_pos, ret);
-	kunmap(bv->bv_page);
+	kunmap(bv.bv_page);
 	if (ret <= 0)
 		return ret;
 	con->in_msg_pos.data_pos += ret;
 	con->in_msg_pos.page_pos += ret;
-	if (con->in_msg_pos.page_pos == bv->bv_len) {
+	if (con->in_msg_pos.page_pos == bv.bv_len) {
 		con->in_msg_pos.page_pos = 0;
-		iter_bio_next(bio_iter, bio_seg);
+		iter_bio_next(bio_iter, bvec_iter);
 	}
 
 	return ret;
@@ -1945,7 +1949,7 @@ static int read_partial_message(struct ceph_connection *con)
 
 #ifdef CONFIG_BLOCK
 		if (m->bio)
-			init_bio_iter(m->bio, &m->bio_iter, &m->bio_seg);
+			init_bio_iter(m->bio, &m->bio_iter, &m->bvec_iter);
 #endif
 	}
 
@@ -1975,7 +1979,7 @@ static int read_partial_message(struct ceph_connection *con)
 		} else if (m->bio) {
 			BUG_ON(!m->bio_iter);
 			ret = read_partial_message_bio(con,
-						 &m->bio_iter, &m->bio_seg,
+						 &m->bio_iter, &m->bvec_iter,
 						 data_len, do_datacrc);
 			if (ret <= 0)
 				return ret;
@@ -2720,7 +2724,6 @@ struct ceph_msg *ceph_msg_new(int type, int front_len, gfp_t flags,
 #ifdef	CONFIG_BLOCK
 	m->bio = NULL;
 	m->bio_iter = NULL;
-	m->bio_seg = 0;
 #endif	/* CONFIG_BLOCK */
 	m->trail = NULL;
 
-- 
1.8.1.3


  parent reply	other threads:[~2013-03-27 17:43 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-27 17:39 Immutable biovecs Kent Overstreet
2013-03-27 17:39 ` [PATCH 01/22] block: Abstract out bvec iterator Kent Overstreet
2013-03-27 17:39 ` [PATCH 02/22] dm: Use bvec_iter for dm_bio_record() Kent Overstreet
2013-03-27 17:39 ` [PATCH 03/22] block: Convert bio_iovec() to bvec_iter Kent Overstreet
2013-03-27 17:39 ` [PATCH 05/22] block: Immutable bio vecs Kent Overstreet
2013-03-27 17:39 ` [PATCH 06/22] aoe: Convert to bvec_iter Kent Overstreet
2013-03-27 17:39 ` [PATCH 07/22] dm-verity: convert to bvec iter Kent Overstreet
2013-03-27 17:39 ` [PATCH 08/22] block: Convert bio_copy_data() to bvec_iter Kent Overstreet
2013-03-27 17:39 ` [PATCH 09/22] bio-integrity: Convert " Kent Overstreet
2013-03-27 17:39 ` [PATCH 10/22] dm-crypt: " Kent Overstreet
2013-03-27 17:39 ` [PATCH 11/22] dm-io: Convert DM_IO_BVEC -> DM_IO_BIO Kent Overstreet
2013-03-27 17:39 ` [PATCH 12/22] umem: Convert to bvec_iter Kent Overstreet
2013-03-27 17:39 ` Kent Overstreet [this message]
2013-03-27 17:39 ` [PATCH 14/22] block: Kill __BVEC_END, __BVEC_START Kent Overstreet
2013-03-27 17:39 ` [PATCH 15/22] block: Kill bio_iovec_idx(), __bio_iovec() Kent Overstreet
2013-03-27 17:39 ` [PATCH 16/22] rbd: Refactor bio cloning, don't clone biovecs Kent Overstreet
2013-03-27 17:39 ` [PATCH 17/22] dm: Refactor for new bio cloning/splitting Kent Overstreet
2013-03-27 17:39 ` [PATCH 18/22] block: Kill bio_sector_offset() Kent Overstreet
2013-03-27 17:39 ` [PATCH 19/22] md: Immutable bvecs Kent Overstreet
2013-03-27 17:39 ` [PATCH 20/22] dm: Don't save bvec anymore Kent Overstreet
2013-03-27 17:39 ` [PATCH 21/22] block: Don't save bvec in bio_map_data Kent Overstreet
2013-03-27 17:39 ` [PATCH 22/22] block: Don't copy bvecs when cloning bios, just share them Kent Overstreet

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=1364405992-28424-14-git-send-email-koverstreet@google.com \
    --to=koverstreet@google.com \
    --cc=axboe@kernel.dk \
    --cc=ceph-devel@vger.kernel.org \
    --cc=dm-devel@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=neilb@suse.de \
    --cc=sage@inktank.com \
    --cc=tj@kernel.org \
    /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

all inboxes | Powered by JetHome®