summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rgw/rgw_rados.cc34
1 files changed, 17 insertions, 17 deletions
diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc
index 31332b5993e..a520bafa730 100644
--- a/src/rgw/rgw_rados.cc
+++ b/src/rgw/rgw_rados.cc
@@ -2639,31 +2639,31 @@ int RGWRados::get_obj(void *ctx, void **handle, rgw_obj& obj,
state->io_ctx.locator_set_key(key);
+ read_len = len;
+
if (reading_from_head) {
/* only when reading from the head object do we need to do the atomic test */
r = append_atomic_test(rctx, read_obj, op, &astate);
if (r < 0)
goto done_ret;
- }
-
- read_len = len;
- if (astate) {
- if (!ofs && astate->data.length() >= len) {
- bl = astate->data;
- goto done;
- }
+ if (astate) {
+ if (!ofs && astate->data.length() >= len) {
+ bl = astate->data;
+ goto done;
+ }
- if (ofs < astate->data.length()) {
- unsigned copy_len = min((uint64_t)astate->data.length(), len);
- astate->data.copy(ofs, copy_len, bl);
- read_len -= copy_len;
- read_ofs += copy_len;
- if (!read_len)
- goto done;
+ if (ofs < astate->data.length()) {
+ unsigned copy_len = min((uint64_t)astate->data.length() - ofs, len);
+ astate->data.copy(ofs, copy_len, bl);
+ read_len -= copy_len;
+ read_ofs += copy_len;
+ if (!read_len)
+ goto done;
- merge_bl = true;
- pbl = &read_bl;
+ merge_bl = true;
+ pbl = &read_bl;
+ }
}
}