summaryrefslogtreecommitdiffstats
path: root/module/zfs/dmu.c
diff options
context:
space:
mode:
authorChunwei Chen <[email protected]>2014-03-29 19:50:30 +0800
committerBrian Behlendorf <[email protected]>2014-04-10 14:28:47 -0700
commit22760eebeff0e0ad826132b1be1113eecb39938a (patch)
tree82e3bfd4cd976a73c05af9449461b206f6f70f02 /module/zfs/dmu.c
parent215b4634c77b7914078baad9260ea854af85ec33 (diff)
Revert "Fix zvol+btrfs hang"
After the dmu_req_copy change, bi_io_vecs are not touched, so this is no longer needed. This reverts commit e26ade5101ba1d8e8350ff1270bfca4258e1ffe3. Signed-off-by: Chunwei Chen <[email protected]> Signed-off-by: Richard Yao <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Issue #2124
Diffstat (limited to 'module/zfs/dmu.c')
-rw-r--r--module/zfs/dmu.c77
1 files changed, 0 insertions, 77 deletions
diff --git a/module/zfs/dmu.c b/module/zfs/dmu.c
index 81b7a870b..5d9337f65 100644
--- a/module/zfs/dmu.c
+++ b/module/zfs/dmu.c
@@ -1053,57 +1053,11 @@ out:
return (offset);
}
-static void
-dmu_bio_put(struct bio *bio)
-{
- struct bio *bio_next;
-
- while (bio) {
- bio_next = bio->bi_next;
- bio_put(bio);
- bio = bio_next;
- }
-}
-
-static int
-dmu_bio_clone(struct bio *bio, struct bio **bio_copy)
-{
- struct bio *bio_root = NULL;
- struct bio *bio_last = NULL;
- struct bio *bio_new;
-
- if (bio == NULL)
- return (EINVAL);
-
- while (bio) {
- bio_new = bio_clone(bio, GFP_NOIO);
- if (bio_new == NULL) {
- dmu_bio_put(bio_root);
- return (ENOMEM);
- }
-
- if (bio_last) {
- bio_last->bi_next = bio_new;
- bio_last = bio_new;
- } else {
- bio_root = bio_new;
- bio_last = bio_new;
- }
-
- bio = bio->bi_next;
- }
-
- *bio_copy = bio_root;
-
- return (0);
-}
-
int
dmu_read_req(objset_t *os, uint64_t object, struct request *req)
{
uint64_t size = blk_rq_bytes(req);
uint64_t offset = blk_rq_pos(req) << 9;
- struct bio *bio_saved = req->bio;
dmu_buf_t **dbp;
int numbufs, i, err;
size_t req_offset;
@@ -1117,17 +1071,6 @@ dmu_read_req(objset_t *os, uint64_t object, struct request *req)
if (err)
return (err);
- /*
- * Clone the bio list so the bv->bv_offset and bv->bv_len members
- * can be safely modified. The original bio list is relinked in to
- * the request when the function exits. This is required because
- * some file systems blindly assume that these values will remain
- * constant between bio_submit() and the IO completion callback.
- */
- err = dmu_bio_clone(bio_saved, &req->bio);
- if (err)
- goto error;
-
req_offset = 0;
for (i = 0; i < numbufs; i++) {
int tocpy, didcpy, bufoff;
@@ -1154,10 +1097,6 @@ dmu_read_req(objset_t *os, uint64_t object, struct request *req)
req_offset += didcpy;
err = 0;
}
-
- dmu_bio_put(req->bio);
- req->bio = bio_saved;
-error:
dmu_buf_rele_array(dbp, numbufs, FTAG);
return (err);
@@ -1168,7 +1107,6 @@ dmu_write_req(objset_t *os, uint64_t object, struct request *req, dmu_tx_t *tx)
{
uint64_t size = blk_rq_bytes(req);
uint64_t offset = blk_rq_pos(req) << 9;
- struct bio *bio_saved = req->bio;
dmu_buf_t **dbp;
int numbufs, i, err;
size_t req_offset;
@@ -1181,17 +1119,6 @@ dmu_write_req(objset_t *os, uint64_t object, struct request *req, dmu_tx_t *tx)
if (err)
return (err);
- /*
- * Clone the bio list so the bv->bv_offset and bv->bv_len members
- * can be safely modified. The original bio list is relinked in to
- * the request when the function exits. This is required because
- * some file systems blindly assume that these values will remain
- * constant between bio_submit() and the IO completion callback.
- */
- err = dmu_bio_clone(bio_saved, &req->bio);
- if (err)
- goto error;
-
req_offset = 0;
for (i = 0; i < numbufs; i++) {
int tocpy, didcpy, bufoff;
@@ -1229,11 +1156,7 @@ dmu_write_req(objset_t *os, uint64_t object, struct request *req, dmu_tx_t *tx)
err = 0;
}
- dmu_bio_put(req->bio);
- req->bio = bio_saved;
-error:
dmu_buf_rele_array(dbp, numbufs, FTAG);
-
return (err);
}