mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-23 19:04:45 +03:00
Linux 3.14 compat: rq_for_each_segment in dmu_req_copy
rq_for_each_segment changed from taking bio_vec * to taking bio_vec. We provide rq_for_each_segment4 which takes both. Signed-off-by: Chunwei Chen <tuxoko@gmail.com> Signed-off-by: Richard Yao <ryao@gentoo.org> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Issue #2124
This commit is contained in:
committed by
Brian Behlendorf
parent
22760eebef
commit
b761912b34
+7
-7
@@ -1011,13 +1011,13 @@ xuio_stat_wbuf_nocopy()
|
||||
static int
|
||||
dmu_req_copy(void *arg_buf, int size, struct request *req, size_t req_offset)
|
||||
{
|
||||
struct bio_vec *bv;
|
||||
struct bio_vec bv, *bvp;
|
||||
struct req_iterator iter;
|
||||
char *bv_buf;
|
||||
int tocpy, bv_len, bv_offset;
|
||||
int offset = 0;
|
||||
|
||||
rq_for_each_segment(bv, req, iter) {
|
||||
rq_for_each_segment4(bv, bvp, req, iter) {
|
||||
/*
|
||||
* Fully consumed the passed arg_buf. We use goto here because
|
||||
* rq_for_each_segment is a double loop
|
||||
@@ -1027,19 +1027,19 @@ dmu_req_copy(void *arg_buf, int size, struct request *req, size_t req_offset)
|
||||
goto out;
|
||||
|
||||
/* Skip already copied bv */
|
||||
if (req_offset >= bv->bv_len) {
|
||||
req_offset -= bv->bv_len;
|
||||
if (req_offset >= bv.bv_len) {
|
||||
req_offset -= bv.bv_len;
|
||||
continue;
|
||||
}
|
||||
|
||||
bv_len = bv->bv_len - req_offset;
|
||||
bv_offset = bv->bv_offset + req_offset;
|
||||
bv_len = bv.bv_len - req_offset;
|
||||
bv_offset = bv.bv_offset + req_offset;
|
||||
req_offset = 0;
|
||||
|
||||
tocpy = MIN(bv_len, size - offset);
|
||||
ASSERT3S(tocpy, >=, 0);
|
||||
|
||||
bv_buf = page_address(bv->bv_page) + bv_offset;
|
||||
bv_buf = page_address(bv.bv_page) + bv_offset;
|
||||
ASSERT3P(bv_buf, !=, NULL);
|
||||
|
||||
if (rq_data_dir(req) == WRITE)
|
||||
|
||||
Reference in New Issue
Block a user