From: Liu Yuan <[email protected]> forward_write_obj_req() is kind of hot code path, so this kind of extra copy is nasty.
Signed-off-by: Liu Yuan <[email protected]> --- sheep/store.c | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sheep/store.c b/sheep/store.c index e2fd0ee..b66f136 100644 --- a/sheep/store.c +++ b/sheep/store.c @@ -293,10 +293,10 @@ static int forward_write_obj_req(struct request *req) int i, n, nr, fd, ret, pollret; unsigned wlen; char name[128]; - struct sd_obj_req hdr = *(struct sd_obj_req *)&req->rq; + struct sd_obj_req *hdr = (struct sd_obj_req *)&req->rq; struct sd_obj_rsp *rsp = (struct sd_obj_rsp *)&req->rp; struct sd_vnode *e; - uint64_t oid = hdr.oid; + uint64_t oid = hdr->oid; int copies; struct pollfd pfds[SD_MAX_REDUNDANCY]; int nr_fds, local = 0; @@ -305,7 +305,7 @@ static int forward_write_obj_req(struct request *req) e = req->entry; nr = req->nr_vnodes; - copies = hdr.copies; + copies = hdr->copies; /* temporary hack */ if (!copies) @@ -318,9 +318,9 @@ static int forward_write_obj_req(struct request *req) for (i = 0; i < ARRAY_SIZE(pfds); i++) pfds[i].fd = -1; - hdr.flags |= SD_FLAG_CMD_IO_LOCAL; + hdr->flags |= SD_FLAG_CMD_IO_LOCAL; - wlen = hdr.data_length; + wlen = hdr->data_length; for (i = 0; i < copies; i++) { n = obj_to_sheep(e, nr, oid, i); @@ -332,14 +332,14 @@ static int forward_write_obj_req(struct request *req) continue; } - fd = get_sheep_fd(e[n].addr, e[n].port, e[n].node_idx, hdr.epoch); + fd = get_sheep_fd(e[n].addr, e[n].port, e[n].node_idx, hdr->epoch); if (fd < 0) { eprintf("failed to connect to %s:%"PRIu32"\n", name, e[n].port); ret = SD_RES_NETWORK_ERROR; goto out; } - ret = send_req(fd, (struct sd_req *)&hdr, req->data, &wlen); + ret = send_req(fd, (struct sd_req *)hdr, req->data, &wlen); if (ret) { /* network errors */ del_sheep_fd(fd); ret = SD_RES_NETWORK_ERROR; @@ -353,7 +353,7 @@ static int forward_write_obj_req(struct request *req) } if (local) { - ret = do_local_io(req, hdr.epoch); + ret = do_local_io(req, hdr->epoch); rsp->result = ret; if (nr_fds == 0) { -- 1.7.8.2 -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
