diff options
| -rw-r--r-- | drivers/block/rbd.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 09514d9d8a97..93369a1a08e1 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
| @@ -2048,6 +2048,7 @@ static int rbd_obj_read_sync(struct rbd_device *rbd_dev, | |||
| 2048 | struct ceph_osd_client *osdc; | 2048 | struct ceph_osd_client *osdc; |
| 2049 | struct page **pages = NULL; | 2049 | struct page **pages = NULL; |
| 2050 | u32 page_count; | 2050 | u32 page_count; |
| 2051 | size_t size; | ||
| 2051 | int ret; | 2052 | int ret; |
| 2052 | 2053 | ||
| 2053 | page_count = (u32) calc_pages_for(offset, length); | 2054 | page_count = (u32) calc_pages_for(offset, length); |
| @@ -2084,7 +2085,10 @@ static int rbd_obj_read_sync(struct rbd_device *rbd_dev, | |||
| 2084 | ret = obj_request->result; | 2085 | ret = obj_request->result; |
| 2085 | if (ret < 0) | 2086 | if (ret < 0) |
| 2086 | goto out; | 2087 | goto out; |
| 2087 | ret = ceph_copy_from_page_vector(pages, buf, 0, obj_request->xferred); | 2088 | |
| 2089 | rbd_assert(obj_request->xferred <= (u64) SIZE_MAX); | ||
| 2090 | size = (size_t) obj_request->xferred; | ||
| 2091 | ret = ceph_copy_from_page_vector(pages, buf, 0, size); | ||
| 2088 | if (version) | 2092 | if (version) |
| 2089 | *version = obj_request->version; | 2093 | *version = obj_request->version; |
| 2090 | out: | 2094 | out: |
