From: levin li <xingke....@taobao.com>

Signed-off-by: levin li <xingke....@taobao.com>
---
 collie/common.c    |   32 ++++++++++++++++----------------
 include/sheep.h    |    5 +++++
 sheep/sheep_priv.h |    5 -----
 3 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/collie/common.c b/collie/common.c
index 364e36c..c03cab7 100644
--- a/collie/common.c
+++ b/collie/common.c
@@ -126,16 +126,16 @@ int sd_write_object(uint64_t oid, uint64_t cow_oid, void 
*data, unsigned int dat
 
 int parse_vdi(vdi_parser_func_t func, size_t size, void *data)
 {
-       int ret, fd;
+       int ret, fd, count;
+       struct vdi_copy *vc;
        unsigned long nr;
        static struct sheepdog_inode i;
        struct sd_req req;
-       static DECLARE_BITMAP(vdi_inuse, SD_NR_VDIS);
-       unsigned int wlen = 0, rlen = sizeof(vdi_inuse) * 2;
-       char *buf;
+       struct sd_rsp *rsp = (struct sd_rsp *)&req;
+       unsigned int wlen = 0, rlen = SD_NR_VDIS;
 
-       buf = zalloc(rlen);
-       if (!buf) {
+       vc = zalloc(rlen);
+       if (!vc) {
                fprintf(stderr, "Failed to allocate memory\n");
                return -1;
        }
@@ -143,30 +143,28 @@ int parse_vdi(vdi_parser_func_t func, size_t size, void 
*data)
        fd = connect_to(sdhost, sdport);
        if (fd < 0) {
                fprintf(stderr, "Failed to connect to %s:%d\n", sdhost, sdport);
-               return fd;
+               ret = -1;
+               goto out;
        }
 
-       sd_init_req(&req, SD_OP_READ_VDIS);
+       sd_init_req(&req, SD_OP_GET_VDI_LIST);
        req.data_length = rlen;
        req.epoch = sd_epoch;
 
-       ret = exec_req(fd, &req, buf, &wlen, &rlen);
+       ret = exec_req(fd, &req, (char *)vc, &wlen, &rlen);
        if (ret < 0) {
                fprintf(stderr, "Failed to read VDIs from %s:%d\n",
                        sdhost, sdport);
                close(fd);
-               return ret;
+               goto out;
        }
        close(fd);
 
-       memcpy(&vdi_inuse, buf, sizeof(vdi_inuse));
-       for (nr = 0; nr < SD_NR_VDIS; nr++) {
+       count = rsp->data_length / sizeof(*vc);
+       for (nr = 0; nr < count; nr++) {
                uint64_t oid;
 
-               if (!test_bit(nr, vdi_inuse))
-                       continue;
-
-               oid = vid_to_vdi_oid(nr);
+               oid = vid_to_vdi_oid(vc[nr].vid);
 
                memset(&i, 0, sizeof(i));
                ret = sd_read_object(oid, &i, SD_INODE_HEADER_SIZE, 0);
@@ -196,6 +194,8 @@ int parse_vdi(vdi_parser_func_t func, size_t size, void 
*data)
                func(i.vdi_id, i.name, i.tag, i.snap_id, 0, &i, data);
        }
 
+out:
+       free(vc);
        return 0;
 }
 
diff --git a/include/sheep.h b/include/sheep.h
index 719d18f..fbbab85 100644
--- a/include/sheep.h
+++ b/include/sheep.h
@@ -36,6 +36,11 @@ struct vnode_info {
        int refcnt;
 };
 
+struct vdi_copy {
+       uint32_t vid;
+       uint32_t nr_copies;
+};
+
 #define TRACE_GRAPH_ENTRY  0x01
 #define TRACE_GRAPH_RETURN 0x02
 
diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h
index 84c4164..9c086e0 100644
--- a/sheep/sheep_priv.h
+++ b/sheep/sheep_priv.h
@@ -137,11 +137,6 @@ struct vdi_iocb {
        int nr_copies;
 };
 
-struct vdi_copy {
-       uint32_t vid;
-       uint32_t nr_copies;
-};
-
 struct store_driver {
        struct list_head list;
        const char *name;
-- 
1.7.1

-- 
sheepdog mailing list
sheepdog@lists.wpkg.org
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to