diff options
author | Alex Elder <elder@inktank.com> | 2013-02-06 14:11:38 -0500 |
---|---|---|
committer | Alex Elder <elder@inktank.com> | 2013-02-19 20:14:05 -0500 |
commit | 23ed6e13b320b33decb516cbe66e71b132df488d (patch) | |
tree | 0e1cf9b6a06f1c5bd7ef3b2b8d40c566e607ef12 | |
parent | 1ceae7ef0fd00c965a2257c6e9eb497ca91f01c7 (diff) |
rbd: ignore result of ceph_copy_from_page_vector()
The result of ceph_copy_from_page_vector() is simply the length
argument it is provided.
This is called by rbd_obj_method_sync(), which returns the result if
it's non-negative. But we always either ignore or overwrite that
return value. So explicitly ignore what's returned by the copy
function, and have rbd_obj_method_sync() always return either a
negative errno or 0.
We also return the result of ceph_copy_from_page_vector() in
rbd_obj_read_sync(). There we still want to return the number of
bytes transferred, but we can use the value we already have in hand
rather than what ceph_copy_from_page_vector() provides.
Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
-rw-r--r-- | drivers/block/rbd.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 93369a1a08e1..c259b4089e95 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
@@ -1889,7 +1889,8 @@ static int rbd_obj_method_sync(struct rbd_device *rbd_dev, | |||
1889 | ret = obj_request->result; | 1889 | ret = obj_request->result; |
1890 | if (ret < 0) | 1890 | if (ret < 0) |
1891 | goto out; | 1891 | goto out; |
1892 | ret = ceph_copy_from_page_vector(pages, inbound, 0, | 1892 | ret = 0; |
1893 | (void) ceph_copy_from_page_vector(pages, inbound, 0, | ||
1893 | obj_request->xferred); | 1894 | obj_request->xferred); |
1894 | if (version) | 1895 | if (version) |
1895 | *version = obj_request->version; | 1896 | *version = obj_request->version; |
@@ -2088,7 +2089,9 @@ static int rbd_obj_read_sync(struct rbd_device *rbd_dev, | |||
2088 | 2089 | ||
2089 | rbd_assert(obj_request->xferred <= (u64) SIZE_MAX); | 2090 | rbd_assert(obj_request->xferred <= (u64) SIZE_MAX); |
2090 | size = (size_t) obj_request->xferred; | 2091 | size = (size_t) obj_request->xferred; |
2091 | ret = ceph_copy_from_page_vector(pages, buf, 0, size); | 2092 | (void) ceph_copy_from_page_vector(pages, buf, 0, size); |
2093 | rbd_assert(size <= (size_t) INT_MAX); | ||
2094 | ret = (int) size; | ||
2092 | if (version) | 2095 | if (version) |
2093 | *version = obj_request->version; | 2096 | *version = obj_request->version; |
2094 | out: | 2097 | out: |
@@ -2141,7 +2144,6 @@ rbd_dev_v1_header_read(struct rbd_device *rbd_dev, u64 *version) | |||
2141 | ret = rbd_obj_read_sync(rbd_dev, rbd_dev->header_name, | 2144 | ret = rbd_obj_read_sync(rbd_dev, rbd_dev->header_name, |
2142 | 0, size, | 2145 | 0, size, |
2143 | (char *) ondisk, version); | 2146 | (char *) ondisk, version); |
2144 | |||
2145 | if (ret < 0) | 2147 | if (ret < 0) |
2146 | goto out_err; | 2148 | goto out_err; |
2147 | if (WARN_ON((size_t) ret < size)) { | 2149 | if (WARN_ON((size_t) ret < size)) { |
@@ -2803,7 +2805,6 @@ static int rbd_dev_v2_object_prefix(struct rbd_device *rbd_dev) | |||
2803 | dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); | 2805 | dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); |
2804 | if (ret < 0) | 2806 | if (ret < 0) |
2805 | goto out; | 2807 | goto out; |
2806 | ret = 0; /* rbd_obj_method_sync() can return positive */ | ||
2807 | 2808 | ||
2808 | p = reply_buf; | 2809 | p = reply_buf; |
2809 | rbd_dev->header.object_prefix = ceph_extract_encoded_string(&p, | 2810 | rbd_dev->header.object_prefix = ceph_extract_encoded_string(&p, |
@@ -3742,7 +3743,6 @@ static int rbd_dev_image_id(struct rbd_device *rbd_dev) | |||
3742 | dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); | 3743 | dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); |
3743 | if (ret < 0) | 3744 | if (ret < 0) |
3744 | goto out; | 3745 | goto out; |
3745 | ret = 0; /* rbd_obj_method_sync() can return positive */ | ||
3746 | 3746 | ||
3747 | p = response; | 3747 | p = response; |
3748 | rbd_dev->spec->image_id = ceph_extract_encoded_string(&p, | 3748 | rbd_dev->spec->image_id = ceph_extract_encoded_string(&p, |