SD_PROTO_VER is a protocol version between sheep and client, so the check of SD_PROTO_VER_TRIM_ZERO_SECTORS must be in gateway_read_obj, not peer_read_obj.
Signed-off-by: MORITA Kazutaka <morita.kazut...@lab.ntt.co.jp> --- sheep/gateway.c | 18 +++++++++++++++--- sheep/ops.c | 8 ++------ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/sheep/gateway.c b/sheep/gateway.c index eea6d41..55b1370 100644 --- a/sheep/gateway.c +++ b/sheep/gateway.c @@ -39,8 +39,11 @@ int gateway_read_obj(struct request *req) uint64_t oid = req->rq.obj.oid; int nr_copies, j; - if (is_object_cache_enabled() && !req->local && !bypass_object_cache(req)) - return object_cache_handle_request(req); + if (is_object_cache_enabled() && !req->local && + !bypass_object_cache(req)) { + ret = object_cache_handle_request(req); + goto out; + } nr_copies = get_req_copy_number(req); oid_to_vnodes(req->vinfo->vnodes, req->vinfo->nr_vnodes, oid, @@ -51,7 +54,7 @@ int gateway_read_obj(struct request *req) continue; ret = peer_read_obj(req); if (ret == SD_RES_SUCCESS) - return ret; + goto out; eprintf("local read fail %x\n", ret); break; @@ -84,6 +87,15 @@ int gateway_read_obj(struct request *req) memcpy(&req->rp, rsp, sizeof(*rsp)); break; } +out: + if (ret == SD_RES_SUCCESS && + req->rq.proto_ver < SD_PROTO_VER_TRIM_ZERO_SECTORS) { + /* the client doesn't support trimming zero bytes */ + set_trimmed_sectors(req->data, req->rp.obj.offset, + req->rp.data_length, req->rq.data_length); + req->rp.data_length = req->rq.data_length; + req->rp.obj.offset = 0; + } return ret; } diff --git a/sheep/ops.c b/sheep/ops.c index a2a795e..df4831b 100644 --- a/sheep/ops.c +++ b/sheep/ops.c @@ -775,12 +775,8 @@ int peer_read_obj(struct request *req) goto out; rsp->data_length = hdr->data_length; - - if (hdr->proto_ver >= SD_PROTO_VER_TRIM_ZERO_SECTORS) { - rsp->obj.offset = 0; - trim_zero_sectors(req->data, &rsp->obj.offset, - &rsp->data_length); - } + rsp->obj.offset = 0; + trim_zero_sectors(req->data, &rsp->obj.offset, &rsp->data_length); if (hdr->obj.copies) rsp->obj.copies = hdr->obj.copies; -- 1.7.2.5 -- sheepdog mailing list sheepdog@lists.wpkg.org http://lists.wpkg.org/mailman/listinfo/sheepdog