We can know how many bytes should be read and written from sd_req header, so we don't need to pass the size with rlen and wlen.
Signed-off-by: MORITA Kazutaka <[email protected]> --- collie/cluster.c | 28 +++++++--------------------- collie/collie.c | 6 ++---- collie/common.c | 19 +++++++------------ collie/debug.c | 7 +++---- collie/node.c | 7 ++----- collie/vdi.c | 50 +++++++++++++++++--------------------------------- include/net.h | 5 ++--- lib/net.c | 34 +++++++++++++++++++++++----------- sheep/gateway.c | 8 ++------ sheep/group.c | 5 ++--- sheep/recovery.c | 13 ++++--------- sheep/sheep_priv.h | 2 +- sheep/sockfd_cache.c | 4 ++-- sheep/store.c | 7 ++----- sheepfs/volume.c | 15 +++++---------- 15 files changed, 81 insertions(+), 129 deletions(-) diff --git a/collie/cluster.c b/collie/cluster.c index ace5254..b81ec00 100644 --- a/collie/cluster.c +++ b/collie/cluster.c @@ -44,20 +44,16 @@ static int list_store(void) int fd, ret; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; - unsigned rlen, wlen; char buf[512] = { 0 }; fd = connect_to(sdhost, sdport); if (fd < 0) return EXIT_SYSFAIL; - wlen = 0; - rlen = 512; - sd_init_req(&hdr, SD_OP_GET_STORE_LIST); - hdr.data_length = rlen; + hdr.data_length = 512; - ret = exec_req(fd, &hdr, buf, &wlen, &rlen); + ret = exec_req(fd, &hdr, buf, NULL); close(fd); if (ret) { @@ -82,7 +78,6 @@ static int cluster_format(int argc, char **argv) int fd, ret; struct sd_so_req hdr; struct sd_so_rsp *rsp = (struct sd_so_rsp *)&hdr; - unsigned rlen, wlen; struct timeval tv; char store_name[STORE_LEN]; @@ -108,11 +103,8 @@ static int cluster_format(int argc, char **argv) hdr.data_length = strlen(store_name) + 1; hdr.flags |= SD_FLAG_CMD_WRITE; - wlen = hdr.data_length; - rlen = 0; - printf("using backend %s store\n", store_name); - ret = exec_req(fd, (struct sd_req *)&hdr, store_name, &wlen, &rlen); + ret = exec_req(fd, (struct sd_req *)&hdr, store_name, NULL); close(fd); if (ret) { @@ -137,7 +129,6 @@ static int cluster_info(int argc, char **argv) int i, fd, ret; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; - unsigned rlen, wlen; struct epoch_log *logs; int nr_logs, log_length; time_t ti, ct; @@ -163,9 +154,7 @@ again: sd_init_req(&hdr, SD_OP_STAT_CLUSTER); hdr.data_length = log_length; - rlen = hdr.data_length; - wlen = 0; - ret = exec_req(fd, &hdr, logs, &wlen, &rlen); + ret = exec_req(fd, &hdr, logs, NULL); close(fd); if (ret != 0) @@ -269,7 +258,7 @@ static int list_snap(void) int fd, ret = EXIT_SYSFAIL; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; - unsigned rlen, wlen; + unsigned rlen; void *buf; buf = malloc(SD_DATA_OBJ_SIZE); @@ -280,13 +269,10 @@ static int list_snap(void) if (fd < 0) goto out; - wlen = 0; - rlen = SD_DATA_OBJ_SIZE; - sd_init_req(&hdr, SD_OP_GET_SNAP_FILE); - hdr.data_length = rlen; + hdr.data_length = SD_DATA_OBJ_SIZE; - ret = exec_req(fd, &hdr, buf, &wlen, &rlen); + ret = exec_req(fd, &hdr, buf, &rlen); close(fd); if (ret) { diff --git a/collie/collie.c b/collie/collie.c index 18c3cf2..04567b4 100644 --- a/collie/collie.c +++ b/collie/collie.c @@ -47,7 +47,7 @@ unsigned master_idx; static int update_node_list(int max_nodes, uint32_t epoch) { int fd, ret; - unsigned int size, wlen; + unsigned int size; char *buf = NULL; struct sd_node *ent; struct sd_node_req hdr; @@ -69,9 +69,7 @@ static int update_node_list(int max_nodes, uint32_t epoch) hdr.data_length = size; - wlen = 0; - - ret = exec_req(fd, (struct sd_req *)&hdr, buf, &wlen, &size); + ret = exec_req(fd, (struct sd_req *)&hdr, buf, &size); if (ret) { ret = -1; goto out; diff --git a/collie/common.c b/collie/common.c index bca213b..227b045 100644 --- a/collie/common.c +++ b/collie/common.c @@ -48,7 +48,6 @@ int sd_read_object(uint64_t oid, void *data, unsigned int datalen, struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; int fd, ret; - unsigned wlen = 0, rlen = datalen; fd = connect_to(sdhost, sdport); if (fd < 0) { @@ -57,14 +56,14 @@ int sd_read_object(uint64_t oid, void *data, unsigned int datalen, } sd_init_req(&hdr, SD_OP_READ_OBJ); - hdr.data_length = rlen; + hdr.data_length = datalen; hdr.obj.oid = oid; hdr.obj.offset = offset; if (direct) hdr.flags |= SD_FLAG_CMD_DIRECT; - ret = exec_req(fd, &hdr, data, &wlen, &rlen); + ret = exec_req(fd, &hdr, data, NULL); close(fd); if (ret) { @@ -90,7 +89,6 @@ int sd_write_object(uint64_t oid, uint64_t cow_oid, void *data, struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; int fd, ret; - unsigned wlen = datalen, rlen = 0; fd = connect_to(sdhost, sdport); if (fd < 0) { @@ -103,7 +101,7 @@ int sd_write_object(uint64_t oid, uint64_t cow_oid, void *data, else sd_init_req(&hdr, SD_OP_WRITE_OBJ); - hdr.data_length = wlen; + hdr.data_length = datalen; hdr.flags = flags | SD_FLAG_CMD_WRITE; if (cow_oid) hdr.flags |= SD_FLAG_CMD_COW; @@ -115,7 +113,7 @@ int sd_write_object(uint64_t oid, uint64_t cow_oid, void *data, hdr.obj.cow_oid = cow_oid; hdr.obj.offset = offset; - ret = exec_req(fd, &hdr, data, &wlen, &rlen); + ret = exec_req(fd, &hdr, data, NULL); close(fd); if (ret) { @@ -139,7 +137,7 @@ int parse_vdi(vdi_parser_func_t func, size_t size, void *data) static struct sheepdog_inode i; struct sd_req req; struct sd_rsp *rsp = (struct sd_rsp *)&req; - unsigned int wlen = 0, rlen = SD_DATA_OBJ_SIZE; /* FIXME */ + unsigned int rlen = SD_DATA_OBJ_SIZE; /* FIXME */ vc = zalloc(rlen); if (!vc) { @@ -157,7 +155,7 @@ int parse_vdi(vdi_parser_func_t func, size_t size, void *data) sd_init_req(&req, SD_OP_GET_VDI_COPIES); req.data_length = rlen; - ret = exec_req(fd, &req, (char *)vc, &wlen, &rlen); + ret = exec_req(fd, &req, (char *)vc, NULL); if (ret < 0) { fprintf(stderr, "Failed to read VDIs from %s:%d\n", sdhost, sdport); @@ -209,15 +207,12 @@ int send_light_req_get_response(struct sd_req *hdr, const char *host, int port) { int fd, ret; struct sd_rsp *rsp = (struct sd_rsp *)hdr; - unsigned rlen, wlen; fd = connect_to(host, port); if (fd < 0) return -1; - rlen = 0; - wlen = 0; - ret = exec_req(fd, hdr, NULL, &wlen, &rlen); + ret = exec_req(fd, hdr, NULL, NULL); close(fd); if (ret) { fprintf(stderr, "failed to connect to %s:%d\n", diff --git a/collie/debug.c b/collie/debug.c index b2d63d9..8221539 100644 --- a/collie/debug.c +++ b/collie/debug.c @@ -77,7 +77,7 @@ static int trace_read_buffer(void) int fd, ret, tfd; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; - unsigned rlen, wlen; + unsigned rlen; #define TRACE_BUF_LEN (1024 * 1024 * 20) char *buf = xzalloc(TRACE_BUF_LEN); @@ -93,11 +93,10 @@ static int trace_read_buffer(void) read_buffer: sd_init_req(&hdr, SD_OP_TRACE_READ_BUF); - hdr.data_length = rlen = TRACE_BUF_LEN; + hdr.data_length = TRACE_BUF_LEN; hdr.epoch = sd_epoch; - wlen = 0; - ret = exec_req(fd, &hdr, buf, &wlen, &rlen); + ret = exec_req(fd, &hdr, buf, &rlen); if (ret) { fprintf(stderr, "Failed to connect\n"); diff --git a/collie/node.c b/collie/node.c index b5aeec1..68fe2e2 100644 --- a/collie/node.c +++ b/collie/node.c @@ -145,7 +145,6 @@ static int node_cache(int argc, char **argv) char *p; int fd, ret; uint32_t cache_size; - unsigned int wlen, rlen = 0; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; @@ -159,13 +158,11 @@ static int node_cache(int argc, char **argv) if (fd < 0) return EXIT_FAILURE; - wlen = sizeof(cache_size); - sd_init_req(&hdr, SD_OP_SET_CACHE_SIZE); hdr.flags = SD_FLAG_CMD_WRITE; - hdr.data_length = wlen; + hdr.data_length = sizeof(cache_size); - ret = exec_req(fd, &hdr, (void *)&cache_size, &wlen, &rlen); + ret = exec_req(fd, &hdr, (void *)&cache_size, NULL); close(fd); if (ret) { diff --git a/collie/vdi.c b/collie/vdi.c index b352294..f6ba21b 100644 --- a/collie/vdi.c +++ b/collie/vdi.c @@ -290,7 +290,7 @@ static void parse_objs(uint64_t oid, obj_parser_func_t func, void *data, unsigne } for (i = 0; i < sd_nodes_nr; i++) { - unsigned wlen = 0, rlen = size; + unsigned rlen; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; @@ -301,13 +301,13 @@ static void parse_objs(uint64_t oid, obj_parser_func_t func, void *data, unsigne break; sd_init_req(&hdr, SD_OP_READ_PEER); - hdr.data_length = rlen; + hdr.data_length = size; hdr.flags = 0; hdr.epoch = sd_epoch; hdr.obj.oid = oid; - ret = exec_req(fd, &hdr, buf, &wlen, &rlen); + ret = exec_req(fd, &hdr, buf, &rlen); close(fd); sprintf(name + strlen(name), ":%d", sd_nodes[i].nid.port); @@ -379,7 +379,6 @@ static int find_vdi_name(char *vdiname, uint32_t snapid, const char *tag, int ret, fd; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; - unsigned int wlen, rlen = 0; char buf[SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN]; fd = connect_to(sdhost, sdport); @@ -394,12 +393,11 @@ static int find_vdi_name(char *vdiname, uint32_t snapid, const char *tag, sd_init_req(&hdr, SD_OP_GET_VDI_INFO); else sd_init_req(&hdr, SD_OP_LOCK_VDI); - wlen = SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN; - hdr.data_length = wlen; + hdr.data_length = SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN; hdr.flags = SD_FLAG_CMD_WRITE; hdr.vdi.snapid = snapid; - ret = exec_req(fd, &hdr, buf, &wlen, &rlen); + ret = exec_req(fd, &hdr, buf, NULL); if (ret) { ret = -1; goto out; @@ -458,7 +456,6 @@ static int do_vdi_create(char *vdiname, int64_t vdi_size, uint32_t base_vid, struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; int fd, ret; - unsigned int wlen, rlen = 0; char buf[SD_MAX_VDI_LEN]; fd = connect_to(sdhost, sdport); @@ -470,18 +467,16 @@ static int do_vdi_create(char *vdiname, int64_t vdi_size, uint32_t base_vid, memset(buf, 0, sizeof(buf)); strncpy(buf, vdiname, SD_MAX_VDI_LEN); - wlen = SD_MAX_VDI_LEN; - sd_init_req(&hdr, SD_OP_NEW_VDI); hdr.flags = SD_FLAG_CMD_WRITE; - hdr.data_length = wlen; + hdr.data_length = SD_MAX_VDI_LEN; hdr.vdi.base_vdi_id = base_vid; hdr.vdi.snapid = snapshot ? 1 : 0; hdr.vdi.vdi_size = roundup(vdi_size, 512); hdr.vdi.copies = nr_copies; - ret = exec_req(fd, &hdr, buf, &wlen, &rlen); + ret = exec_req(fd, &hdr, buf, NULL); close(fd); @@ -730,26 +725,22 @@ static int do_vdi_delete(const char *vdiname, int snap_id, const char *snap_tag) int fd, ret; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; - unsigned rlen, wlen; char data[SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN]; fd = connect_to(sdhost, sdport); if (fd < 0) return EXIT_SYSFAIL; - rlen = 0; - wlen = sizeof(data); - sd_init_req(&hdr, SD_OP_DEL_VDI); hdr.flags = SD_FLAG_CMD_WRITE; - hdr.data_length = wlen; + hdr.data_length = sizeof(data); hdr.vdi.snapid = snap_id; memset(data, 0, sizeof(data)); strncpy(data, vdiname, SD_MAX_VDI_LEN); if (snap_tag) strncpy(data + SD_MAX_VDI_LEN, snap_tag, SD_MAX_VDI_TAG_LEN); - ret = exec_req(fd, &hdr, data, &wlen, &rlen); + ret = exec_req(fd, &hdr, data, NULL); close(fd); if (ret) { @@ -867,7 +858,6 @@ static int print_obj_epoch(uint64_t oid) int i, j, fd, ret; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; - unsigned rlen, wlen; struct sd_vnode vnodes[SD_MAX_VNODES]; struct sd_vnode *vnode_buf[SD_MAX_COPIES]; struct epoch_log *logs; @@ -894,9 +884,7 @@ again: hdr.epoch = sd_epoch; hdr.data_length = log_length; - rlen = hdr.data_length; - wlen = 0; - ret = exec_req(fd, &hdr, logs, &wlen, &rlen); + ret = exec_req(fd, &hdr, logs, NULL); close(fd); if (ret != 0) @@ -993,7 +981,6 @@ static int find_vdi_attr_oid(char *vdiname, char *tag, uint32_t snapid, struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; int fd, ret; - unsigned int wlen, rlen; struct sheepdog_vdi_attr vattr; memset(&vattr, 0, sizeof(vattr)); @@ -1013,10 +1000,8 @@ static int find_vdi_attr_oid(char *vdiname, char *tag, uint32_t snapid, } sd_init_req(&hdr, SD_OP_GET_VDI_ATTR); - wlen = SD_ATTR_OBJ_SIZE; - rlen = 0; hdr.flags = SD_FLAG_CMD_WRITE; - hdr.data_length = wlen; + hdr.data_length = SD_ATTR_OBJ_SIZE; hdr.vdi.snapid = vdi_cmd_data.snapshot_id; if (create) @@ -1026,7 +1011,7 @@ static int find_vdi_attr_oid(char *vdiname, char *tag, uint32_t snapid, if (delete) hdr.flags |= SD_FLAG_CMD_DEL; - ret = exec_req(fd, &hdr, &vattr, &wlen, &rlen); + ret = exec_req(fd, &hdr, &vattr, NULL); if (ret) { ret = SD_RES_EIO; goto out; @@ -1363,7 +1348,7 @@ static void *read_object_from(struct sd_vnode *vnode, uint64_t oid) struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; int fd, ret; - unsigned wlen = 0, rlen = SD_DATA_OBJ_SIZE; + unsigned rlen; char name[128]; void *buf; @@ -1384,11 +1369,11 @@ static void *read_object_from(struct sd_vnode *vnode, uint64_t oid) sd_init_req(&hdr, SD_OP_READ_PEER); hdr.epoch = sd_epoch; hdr.flags = 0; - hdr.data_length = rlen; + hdr.data_length = SD_DATA_OBJ_SIZE; hdr.obj.oid = oid; - ret = exec_req(fd, &hdr, buf, &wlen, &rlen); + ret = exec_req(fd, &hdr, buf, &rlen); close(fd); if (ret) { @@ -1412,7 +1397,6 @@ static void write_object_to(struct sd_vnode *vnode, uint64_t oid, void *buf) struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; int fd, ret; - unsigned wlen = SD_DATA_OBJ_SIZE, rlen = 0; char name[128]; addr_to_str(name, sizeof(name), vnode->nid.addr, 0); @@ -1426,11 +1410,11 @@ static void write_object_to(struct sd_vnode *vnode, uint64_t oid, void *buf) sd_init_req(&hdr, SD_OP_WRITE_PEER); hdr.epoch = sd_epoch; hdr.flags = SD_FLAG_CMD_WRITE; - hdr.data_length = wlen; + hdr.data_length = SD_DATA_OBJ_SIZE; hdr.obj.oid = oid; - ret = exec_req(fd, &hdr, buf, &wlen, &rlen); + ret = exec_req(fd, &hdr, buf, NULL); close(fd); if (ret) { diff --git a/include/net.h b/include/net.h index 7fd9f46..2966b2d 100644 --- a/include/net.h +++ b/include/net.h @@ -41,9 +41,8 @@ int do_read(int sockfd, void *buf, int len); int rx(struct connection *conn, enum conn_state next_state); int tx(struct connection *conn, enum conn_state next_state, int flags); int connect_to(const char *name, int port); -int send_req(int sockfd, struct sd_req *hdr, void *data, unsigned int *wlen); -int exec_req(int sockfd, struct sd_req *hdr, void *data, - unsigned int *wlen, unsigned int *rlen); +int send_req(int sockfd, struct sd_req *hdr, void *data, unsigned int wlen); +int exec_req(int sockfd, struct sd_req *hdr, void *data, unsigned int *len); int create_listen_ports(char *bindaddr, int port, int (*callback)(int fd, void *), void *data); diff --git a/lib/net.c b/lib/net.c index 1c6a632..4b32fe7 100644 --- a/lib/net.c +++ b/lib/net.c @@ -320,7 +320,7 @@ rewrite: return 0; } -int send_req(int sockfd, struct sd_req *hdr, void *data, unsigned int *wlen) +int send_req(int sockfd, struct sd_req *hdr, void *data, unsigned int wlen) { int ret; struct msghdr msg; @@ -334,27 +334,36 @@ int send_req(int sockfd, struct sd_req *hdr, void *data, unsigned int *wlen) iov[0].iov_base = hdr; iov[0].iov_len = sizeof(*hdr); - if (*wlen) { + if (wlen) { msg.msg_iovlen++; iov[1].iov_base = data; - iov[1].iov_len = *wlen; + iov[1].iov_len = wlen; } - ret = do_write(sockfd, &msg, sizeof(*hdr) + *wlen); + ret = do_write(sockfd, &msg, sizeof(*hdr) + wlen); if (ret) { eprintf("failed to send request %x, %d: %m\n", hdr->opcode, - *wlen); + wlen); ret = -1; } return ret; } -int exec_req(int sockfd, struct sd_req *hdr, void *data, - unsigned int *wlen, unsigned int *rlen) +/* when len is not NULL, this function sets *len to the received data size */ +int exec_req(int sockfd, struct sd_req *hdr, void *data, unsigned int *len) { int ret; struct sd_rsp *rsp = (struct sd_rsp *)hdr; + unsigned int wlen, rlen; + + if (hdr->flags & SD_FLAG_CMD_WRITE) { + wlen = hdr->data_length; + rlen = 0; + } else { + wlen = 0; + rlen = hdr->data_length; + } if (send_req(sockfd, hdr, data, wlen)) return 1; @@ -365,17 +374,20 @@ int exec_req(int sockfd, struct sd_req *hdr, void *data, return 1; } - if (*rlen > rsp->data_length) - *rlen = rsp->data_length; + if (rlen > rsp->data_length) + rlen = rsp->data_length; - if (*rlen) { - ret = do_read(sockfd, data, *rlen); + if (rlen) { + ret = do_read(sockfd, data, rlen); if (ret) { eprintf("failed to read the response data\n"); return 1; } } + if (len) + *len = rlen; + return 0; } diff --git a/sheep/gateway.c b/sheep/gateway.c index f9419ec..1f25850 100644 --- a/sheep/gateway.c +++ b/sheep/gateway.c @@ -31,7 +31,6 @@ static inline void gateway_init_fwd_hdr(struct sd_req *fwd, struct sd_req *hdr) int gateway_read_obj(struct request *req) { int i, ret = SD_RES_SUCCESS; - unsigned wlen, rlen; struct sd_req fwd_hdr; struct sd_rsp *rsp = (struct sd_rsp *)&fwd_hdr; struct sd_vnode *v; @@ -76,10 +75,7 @@ int gateway_read_obj(struct request *req) * structure. */ gateway_init_fwd_hdr(&fwd_hdr, &req->rq); - wlen = 0; - rlen = fwd_hdr.data_length; - ret = sheep_exec_req(&v->nid, &fwd_hdr, req->data, &wlen, - &rlen); + ret = sheep_exec_req(&v->nid, &fwd_hdr, req->data, NULL); if (ret != SD_RES_SUCCESS) continue; @@ -288,7 +284,7 @@ static int gateway_forward_request(struct request *req, bool all_node) break; } - ret = send_req(sfd->fd, &hdr, req->data, &wlen); + ret = send_req(sfd->fd, &hdr, req->data, wlen); if (ret) { sheep_del_sockfd(nid, sfd); err_ret = SD_RES_NETWORK_ERROR; diff --git a/sheep/group.c b/sheep/group.c index ebb6192..62e32a6 100644 --- a/sheep/group.c +++ b/sheep/group.c @@ -607,7 +607,7 @@ static int get_vdis_from(struct sd_node *node) struct sd_rsp *rsp = (struct sd_rsp *)&hdr; struct vdi_copy *vc = NULL; int i, ret = SD_RES_SUCCESS; - unsigned int rlen, wlen; + unsigned int rlen; int count; if (node_is_local(node)) @@ -624,8 +624,7 @@ static int get_vdis_from(struct sd_node *node) sd_init_req(&hdr, SD_OP_GET_VDI_COPIES); hdr.epoch = sys->epoch; hdr.data_length = rlen; - wlen = 0; - ret = sheep_exec_req(&node->nid, &hdr, (char *)vc, &wlen, &rlen); + ret = sheep_exec_req(&node->nid, &hdr, (char *)vc, NULL); if (ret != SD_RES_SUCCESS) goto out; diff --git a/sheep/recovery.c b/sheep/recovery.c index f455a2b..3c58231 100644 --- a/sheep/recovery.c +++ b/sheep/recovery.c @@ -65,7 +65,7 @@ static int recover_object_from_replica(uint64_t oid, struct sd_vnode *vnode, { struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; - unsigned wlen = 0, rlen; + unsigned rlen; int ret = SD_RES_NO_MEM; void *buf = NULL; struct siocb iocb = { 0 }; @@ -91,7 +91,7 @@ static int recover_object_from_replica(uint64_t oid, struct sd_vnode *vnode, hdr.obj.oid = oid; hdr.obj.tgt_epoch = tgt_epoch; - ret = sheep_exec_req(&vnode->nid, &hdr, buf, &wlen, &rlen); + ret = sheep_exec_req(&vnode->nid, &hdr, buf, &rlen); if (ret != SD_RES_SUCCESS) goto out; iocb.epoch = epoch; @@ -507,7 +507,6 @@ static void finish_object_list(struct work *work) static int fetch_object_list(struct sd_node *e, uint32_t epoch, uint8_t *buf, size_t buf_size) { - unsigned wlen, rlen; char name[128]; struct sd_list_req hdr; struct sd_list_rsp *rsp = (struct sd_list_rsp *)&hdr; @@ -517,15 +516,11 @@ static int fetch_object_list(struct sd_node *e, uint32_t epoch, dprintf("%s %"PRIu32"\n", name, e->nid.port); - wlen = 0; - rlen = buf_size; - sd_init_req((struct sd_req *)&hdr, SD_OP_GET_OBJ_LIST); hdr.tgt_epoch = epoch - 1; - hdr.flags = 0; - hdr.data_length = rlen; + hdr.data_length = buf_size; - ret = sheep_exec_req(&e->nid, (struct sd_req *)&hdr, buf, &wlen, &rlen); + ret = sheep_exec_req(&e->nid, (struct sd_req *)&hdr, buf, NULL); if (ret != SD_RES_SUCCESS) return -1; diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h index d308751..d0f6f00 100644 --- a/sheep/sheep_priv.h +++ b/sheep/sheep_priv.h @@ -405,7 +405,7 @@ struct sockfd *sheep_get_sockfd(struct node_id *); void sheep_put_sockfd(struct node_id *, struct sockfd *); void sheep_del_sockfd(struct node_id *, struct sockfd *); int sheep_exec_req(struct node_id *nid, struct sd_req *hdr, void *data, - unsigned int *wlen, unsigned int *rlen); + unsigned int *rlen); static inline bool is_object_cache_enabled(void) { diff --git a/sheep/sockfd_cache.c b/sheep/sockfd_cache.c index ac1c9ce..6f3da08 100644 --- a/sheep/sockfd_cache.c +++ b/sheep/sockfd_cache.c @@ -464,7 +464,7 @@ void sheep_del_sockfd(struct node_id *nid, struct sockfd *sfd) } int sheep_exec_req(struct node_id *nid, struct sd_req *hdr, void *buf, - unsigned int *wlen, unsigned int *rlen) + unsigned int *rlen) { struct sd_rsp *rsp = (struct sd_rsp *)hdr; struct sockfd *sfd; @@ -474,7 +474,7 @@ int sheep_exec_req(struct node_id *nid, struct sd_req *hdr, void *buf, if (!sfd) return SD_RES_NETWORK_ERROR; - ret = exec_req(sfd->fd, hdr, buf, wlen, rlen); + ret = exec_req(sfd->fd, hdr, buf, rlen); if (ret) { dprintf("remote node might have gone away\n"); sheep_del_sockfd(nid, sfd); diff --git a/sheep/store.c b/sheep/store.c index e3c95bd..64c9e5d 100644 --- a/sheep/store.c +++ b/sheep/store.c @@ -92,17 +92,14 @@ int epoch_log_read_remote(uint32_t epoch, struct sd_node *nodes, int len) for (i = 0; i < nr; i++) { struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; - unsigned int rlen, wlen; if (node_is_local(&local_nodes[i])) continue; sd_init_req(&hdr, SD_OP_GET_EPOCH); - hdr.data_length = rlen = len; + hdr.data_length = len; hdr.obj.tgt_epoch = epoch; - wlen = 0; - ret = sheep_exec_req(&local_nodes[i].nid, &hdr, nodes, &wlen, - &rlen); + ret = sheep_exec_req(&local_nodes[i].nid, &hdr, nodes, NULL); if (ret != SD_RES_SUCCESS) continue; diff --git a/sheepfs/volume.c b/sheepfs/volume.c index 20cf029..80492b6 100644 --- a/sheepfs/volume.c +++ b/sheepfs/volume.c @@ -140,7 +140,6 @@ static int volume_rw_object(char *buf, uint64_t oid, size_t size, struct sd_req hdr = { 0 }; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; int ret, fd, sock_idx; - unsigned wlen = 0, rlen = 0; bool create = false; uint32_t vid = oid_to_vid(oid); struct vdi_inode *vdi; @@ -182,11 +181,9 @@ static int volume_rw_object(char *buf, uint64_t oid, size_t size, } } - if (rw == VOLUME_READ) { - rlen = size; + if (rw == VOLUME_READ) hdr.opcode = SD_OP_READ_OBJ; - } else { - wlen = size; + else { hdr.opcode = create ? SD_OP_CREATE_AND_WRITE_OBJ : SD_OP_WRITE_OBJ; hdr.flags |= SD_FLAG_CMD_WRITE; @@ -200,7 +197,7 @@ static int volume_rw_object(char *buf, uint64_t oid, size_t size, hdr.flags |= SD_FLAG_CMD_CACHE; fd = get_socket_fd(vdi, &sock_idx); - ret = exec_req(fd, &hdr, buf, &wlen, &rlen); + ret = exec_req(fd, &hdr, buf, NULL); put_socket_fd(vdi, sock_idx); if (ret || rsp->result != SD_RES_SUCCESS) { @@ -296,7 +293,6 @@ static int volume_do_sync(uint32_t vid) struct sd_req hdr = { 0 }; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; int ret, fd, idx; - unsigned wlen = 0, rlen = 0; struct vdi_inode *vdi; pthread_rwlock_rdlock(&vdi_inode_tree_lock); @@ -307,7 +303,7 @@ static int volume_do_sync(uint32_t vid) hdr.obj.oid = vid_to_vdi_oid(vid); fd = get_socket_fd(vdi, &idx); - ret = exec_req(fd, &hdr, NULL, &wlen, &rlen); + ret = exec_req(fd, &hdr, NULL, NULL); put_socket_fd(vdi, idx); if (ret || rsp->result != SD_RES_SUCCESS) { @@ -484,7 +480,6 @@ static int volume_sync_and_delete(uint32_t vid) struct sd_req hdr = { 0 }; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; int ret, fd, idx; - unsigned wlen = 0, rlen = 0; struct vdi_inode *vdi; pthread_rwlock_rdlock(&vdi_inode_tree_lock); @@ -495,7 +490,7 @@ static int volume_sync_and_delete(uint32_t vid) hdr.obj.oid = vid_to_vdi_oid(vid); fd = get_socket_fd(vdi, &idx); - ret = exec_req(fd, &hdr, NULL, &wlen, &rlen); + ret = exec_req(fd, &hdr, NULL, NULL); put_socket_fd(vdi, idx); if (ret || rsp->result != SD_RES_SUCCESS) { -- 1.7.2.5 -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
