From: Kent Overstreet <koverstreet@google.com>
To: linux-bcache@vger.kernel.org, linux-kernel@vger.kernel.org,
dm-devel@redhat.com
Cc: axboe@kernel.dk, Kent Overstreet <koverstreet@google.com>,
tj@kernel.org, neilb@suse.de
Subject: [PATCH v2 10/26] block: Add submit_bio_wait(), remove from md
Date: Mon, 10 Sep 2012 17:22:21 -0700 [thread overview]
Message-ID: <1347322957-25260-11-git-send-email-koverstreet@google.com> (raw)
In-Reply-To: <1347322957-25260-1-git-send-email-koverstreet@google.com>
Random cleanup - this code was duplicated and it's not really specific
to md.
Also added the ability to return the actual error code.
Signed-off-by: Kent Overstreet <koverstreet@google.com>
CC: Jens Axboe <axboe@kernel.dk>
CC: NeilBrown <neilb@suse.de>
---
drivers/md/raid1.c | 19 -------------------
drivers/md/raid10.c | 19 -------------------
fs/bio.c | 36 ++++++++++++++++++++++++++++++++++++
include/linux/bio.h | 1 +
4 files changed, 37 insertions(+), 38 deletions(-)
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 2488440..ee85154 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -2048,25 +2048,6 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
}
}
-static void bi_complete(struct bio *bio, int error)
-{
- complete((struct completion *)bio->bi_private);
-}
-
-static int submit_bio_wait(int rw, struct bio *bio)
-{
- struct completion event;
- rw |= REQ_SYNC;
-
- init_completion(&event);
- bio->bi_private = &event;
- bio->bi_end_io = bi_complete;
- submit_bio(rw, bio);
- wait_for_completion(&event);
-
- return test_bit(BIO_UPTODATE, &bio->bi_flags);
-}
-
static int narrow_write_error(struct r1bio *r1_bio, int i)
{
struct mddev *mddev = r1_bio->mddev;
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 6d06d83..f001c1b 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -2410,25 +2410,6 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
}
}
-static void bi_complete(struct bio *bio, int error)
-{
- complete((struct completion *)bio->bi_private);
-}
-
-static int submit_bio_wait(int rw, struct bio *bio)
-{
- struct completion event;
- rw |= REQ_SYNC;
-
- init_completion(&event);
- bio->bi_private = &event;
- bio->bi_end_io = bi_complete;
- submit_bio(rw, bio);
- wait_for_completion(&event);
-
- return test_bit(BIO_UPTODATE, &bio->bi_flags);
-}
-
static int narrow_write_error(struct r10bio *r10_bio, int i)
{
struct bio *bio = r10_bio->master_bio;
diff --git a/fs/bio.c b/fs/bio.c
index addeac2..1342a16 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -750,6 +750,42 @@ int bio_add_page(struct bio *bio, struct page *page, unsigned int len,
}
EXPORT_SYMBOL(bio_add_page);
+struct submit_bio_ret {
+ struct completion event;
+ int error;
+};
+
+static void submit_bio_wait_endio(struct bio *bio, int error)
+{
+ struct submit_bio_ret *ret = bio->bi_private;
+
+ ret->error = error;
+ complete(&ret->event);
+}
+
+/**
+ * submit_bio_wait - submit a bio, and wait until it completes
+ * @rw: whether to %READ or %WRITE, or maybe to %READA (read ahead)
+ * @bio: The &struct bio which describes the I/O
+ *
+ * Simple wrapper around submit_bio(). Returns 0 on success, or the error from
+ * bio_endio() on failure.
+ */
+int submit_bio_wait(int rw, struct bio *bio)
+{
+ struct submit_bio_ret ret;
+
+ rw |= REQ_SYNC;
+ init_completion(&ret.event);
+ bio->bi_private = &ret;
+ bio->bi_end_io = submit_bio_wait_endio;
+ submit_bio(rw, bio);
+ wait_for_completion(&ret.event);
+
+ return ret.error;
+}
+EXPORT_SYMBOL(submit_bio_wait);
+
/**
* bio_advance - increment/complete a bio by some number of bytes
* @bio: bio to advance
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 92bff0e..949c48a 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -249,6 +249,7 @@ extern void bio_endio(struct bio *, int);
struct request_queue;
extern int bio_phys_segments(struct request_queue *, struct bio *);
+extern int submit_bio_wait(int rw, struct bio *bio);
void bio_advance(struct bio *, unsigned);
extern void bio_init(struct bio *);
--
1.7.12
next prev parent reply other threads:[~2012-09-11 0:27 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-11 0:22 [PATCH v2 00/26] Prep work for immutable bio vecs Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 01/26] block: Convert integrity to bvec_alloc_bs(), and a bugfix Kent Overstreet
2012-09-11 20:36 ` [dm-devel] " Vivek Goyal
2012-09-11 20:48 ` Kent Overstreet
2012-09-11 22:07 ` Kent Overstreet
2012-09-12 19:39 ` Martin K. Petersen
2012-09-17 21:08 ` Kent Overstreet
2012-09-20 21:53 ` Tejun Heo
2012-09-11 0:22 ` [PATCH v2 02/26] block: Add bio_advance() Kent Overstreet
2012-09-20 21:58 ` Tejun Heo
2012-09-20 23:13 ` Kent Overstreet
2012-09-20 23:25 ` Tejun Heo
2012-09-20 23:38 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 03/26] block: Refactor blk_update_request() Kent Overstreet
2012-09-20 23:20 ` Tejun Heo
2012-09-20 23:36 ` Kent Overstreet
2012-09-20 23:41 ` Tejun Heo
2012-09-20 23:50 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 04/26] md: Convert md_trim_bio() to use bio_advance() Kent Overstreet
2012-09-20 23:27 ` Tejun Heo
2012-09-11 0:22 ` [PATCH v2 05/26] block: Add bio_end() Kent Overstreet
2012-09-17 9:17 ` Steven Whitehouse
2012-09-20 23:32 ` Tejun Heo
2012-09-20 23:44 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 06/26] block: Use bio_sectors() more consistently Kent Overstreet
2012-09-20 23:36 ` Tejun Heo
2012-09-20 23:47 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 07/26] block: Don't use bi_idx in bio_split() or require it to be 0 Kent Overstreet
2012-09-20 23:45 ` Tejun Heo
2012-09-21 0:00 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 08/26] block: Remove bi_idx references Kent Overstreet
2012-09-20 23:49 ` Tejun Heo
2012-09-21 0:04 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 09/26] block: Remove some unnecessary bi_vcnt usage Kent Overstreet
2012-09-20 23:51 ` Tejun Heo
2012-09-11 0:22 ` Kent Overstreet [this message]
2012-09-20 23:56 ` [PATCH v2 10/26] block: Add submit_bio_wait(), remove from md Tejun Heo
2012-09-21 0:06 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 11/26] raid10: Use bio_reset() Kent Overstreet
2012-09-20 23:59 ` Tejun Heo
2012-09-11 0:22 ` [PATCH v2 12/26] raid1: use bio_reset() Kent Overstreet
2012-09-11 4:59 ` NeilBrown
2012-09-11 18:28 ` Kent Overstreet
2012-09-11 21:17 ` NeilBrown
2012-09-11 0:22 ` [PATCH v2 13/26] raid5: " Kent Overstreet
2012-09-11 5:03 ` NeilBrown
2012-09-11 19:26 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 14/26] raid1: Refactor narrow_write_error() to not use bi_idx Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 15/26] block: Add bio_copy_data() Kent Overstreet
2012-09-21 0:06 ` Tejun Heo
2012-09-21 0:09 ` Kent Overstreet
2012-09-21 0:15 ` Tejun Heo
2012-09-21 0:09 ` Tejun Heo
2012-09-21 0:13 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 16/26] pktcdvd: use bio_copy_data() Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 17/26] pktcdvd: Use bio_reset() in disabled code to kill bi_idx usage Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 18/26] raid1: use bio_copy_data() Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 19/26] bounce: Refactor __blk_queue_bounce to not use bi_io_vec Kent Overstreet
2012-09-21 0:25 ` Tejun Heo
2012-09-21 0:29 ` Kent Overstreet
2012-09-21 0:27 ` Tejun Heo
2012-09-21 0:34 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 20/26] block: Add bio_for_each_segment_all() Kent Overstreet
2012-09-21 0:35 ` Tejun Heo
2012-09-11 0:22 ` [PATCH v2 21/26] block: Convert some code to bio_for_each_segment_all() Kent Overstreet
2012-09-21 0:38 ` Tejun Heo
2012-09-21 0:50 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 22/26] block: Add bio_alloc_pages() Kent Overstreet
2012-09-21 0:47 ` Tejun Heo
2012-09-21 4:50 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 23/26] raid1: use bio_alloc_pages() Kent Overstreet
2012-09-21 0:48 ` Tejun Heo
2012-09-21 4:51 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 24/26] block: Add an explicit bio flag for bios that own their bvec Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 25/26] bio-integrity: Add explicit field for owner of bip_buf Kent Overstreet
2012-09-12 19:41 ` Martin K. Petersen
2012-09-17 21:09 ` Kent Overstreet
2012-09-11 0:22 ` [PATCH v2 26/26] block: Add BIO_SUBMITTED flag, kill BIO_CLONED Kent Overstreet
2012-09-11 5:22 ` [PATCH v2 00/26] Prep work for immutable bio vecs NeilBrown
2012-09-20 23:22 ` Tejun Heo
2012-10-15 20:08 [PATCH v4 00/24] " Kent Overstreet
2012-10-15 20:09 ` [PATCH v2 10/26] block: Add submit_bio_wait(), remove from md 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=1347322957-25260-11-git-send-email-koverstreet@google.com \
--to=koverstreet@google.com \
--cc=axboe@kernel.dk \
--cc=dm-devel@redhat.com \
--cc=linux-bcache@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=neilb@suse.de \
--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®