diff options
author | Chunwei Chen <[email protected]> | 2014-03-29 19:50:30 +0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2014-04-10 14:28:47 -0700 |
commit | 22760eebeff0e0ad826132b1be1113eecb39938a (patch) | |
tree | 82e3bfd4cd976a73c05af9449461b206f6f70f02 /module | |
parent | 215b4634c77b7914078baad9260ea854af85ec33 (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')
-rw-r--r-- | module/zfs/dmu.c | 77 |
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); } |