This patch does the following things: - reuse the socket discriptor during listing vdis - read only the part of the vdi objects
Signed-off-by: MORITA Kazutaka <morita.kazut...@lab.ntt.co.jp> --- shepherd/shepherd.c | 18 +++++++----------- 1 files changed, 7 insertions(+), 11 deletions(-) diff --git a/shepherd/shepherd.c b/shepherd/shepherd.c index 51401e3..fa51ebe 100644 --- a/shepherd/shepherd.c +++ b/shepherd/shepherd.c @@ -292,10 +292,10 @@ static int parse_vdi(vdi_parser_func_t func, void *data) rlen = sizeof(vdi_inuse); ret = exec_req(fd, &req, vdi_inuse, &wlen, &rlen); - close(fd); - - if (ret < 0) + if (ret < 0) { + close(fd); return ret; + } for (nr = 0; nr < SD_NR_VDIS; nr++) { struct sd_obj_req hdr; @@ -305,13 +305,8 @@ static int parse_vdi(vdi_parser_func_t func, void *data) continue; wlen = 0; - rlen = sizeof(i); - - fd = connect_to("localhost", sdport); - if (fd < 0) { - printf("failed to connect, %m\n"); - return -1; - } + /* don't need to read the entire object */ + rlen = sizeof(i) - sizeof(i.data_vdi_id); memset(&hdr, 0, sizeof(hdr)); hdr.opcode = SD_OP_READ_OBJ; @@ -319,7 +314,6 @@ static int parse_vdi(vdi_parser_func_t func, void *data) hdr.data_length = rlen; ret = exec_req(fd, (struct sd_req *)&hdr, &i, &wlen, &rlen); - close(fd); if (!ret && rsp->result == SD_RES_SUCCESS) { if (i.name[0] == '\0') /* deleted */ @@ -329,6 +323,8 @@ static int parse_vdi(vdi_parser_func_t func, void *data) printf("error %lu, %d\n", nr, ret); } + close(fd); + return 0; } -- 1.5.6.5 -- sheepdog mailing list sheepdog@lists.wpkg.org http://lists.wpkg.org/mailman/listinfo/sheepdog