We use void* buf field on sturct recovery_work only for object IDs.
uint64_t* is a better type here.

Signed-off-by: MORITA Kazutaka <[email protected]>
---
 sheep/store.c |   20 ++++++++++----------
 1 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/sheep/store.c b/sheep/store.c
index d4955c5..45ddd23 100644
--- a/sheep/store.c
+++ b/sheep/store.c
@@ -1048,7 +1048,7 @@ struct recovery_work {
        struct list_head rw_siblings;
 
        int count;
-       char *buf;
+       uint64_t *oids;
 };
 
 static LIST_HEAD(recovery_work_list);
@@ -1314,7 +1314,7 @@ static void recover_one(struct work *work, int idx)
        struct recovery_work *rw = container_of(work, struct recovery_work, 
work);
        char *buf = NULL;
        int ret;
-       uint64_t oid = *(((uint64_t *)rw->buf) + rw->done);
+       uint64_t oid = rw->oids[rw->done];
        struct sheepdog_node_list_entry old_nodes[SD_MAX_NODES];
        struct sheepdog_node_list_entry cur_nodes[SD_MAX_NODES];
        struct sheepdog_vnode_list_entry old_vnodes[SD_MAX_VNODES];
@@ -1420,7 +1420,7 @@ static void __start_recovery(struct work *work, int idx);
 static void recover_timer(void *data)
 {
        struct recovery_work *rw = (struct recovery_work *)data;
-       uint64_t oid = *(((uint64_t *)rw->buf) + rw->done);
+       uint64_t oid = rw->oids[rw->done];
 
        if (is_access_to_busy_objects(oid)) {
                suspended_recovery_work = rw;
@@ -1441,7 +1441,7 @@ void resume_recovery_work(void)
 
        rw = suspended_recovery_work;
 
-       oid =  *(((uint64_t *)rw->buf) + rw->done);
+       oid =  rw->oids[rw->done];
        if (is_access_to_busy_objects(oid))
                return;
 
@@ -1474,7 +1474,7 @@ int is_recoverying_oid(uint64_t oid)
        }
 
        if (recovering_hval <= hval) {
-               if (bsearch(&oid, ((uint64_t *)rw->buf) + rw->done,
+               if (bsearch(&oid, rw->oids + rw->done,
                            rw->count - rw->done, sizeof(oid), obj_cmp)) {
                        dprintf("recover the object %" PRIx64 " first\n", oid);
                        blocking_oid = oid;
@@ -1489,7 +1489,7 @@ int is_recoverying_oid(uint64_t oid)
 static void recover_done(struct work *work, int idx)
 {
        struct recovery_work *rw = container_of(work, struct recovery_work, 
work);
-       uint64_t oid = *(((uint64_t *)rw->buf) + rw->done);
+       uint64_t oid = rw->oids[rw->done];
 
        if (rw->retry && list_empty(&recovery_work_list)) {
                rw->retry = 0;
@@ -1522,7 +1522,7 @@ static void recover_done(struct work *work, int idx)
        sys->recovered_epoch = rw->epoch;
        resume_pending_requests();
 
-       free(rw->buf);
+       free(rw->oids);
        free(rw);
 
        if (!list_empty(&recovery_work_list)) {
@@ -1638,7 +1638,7 @@ static int fill_obj_list(struct recovery_work *rw,
                nr  = __fill_obj_list(cur_entry + i, rw->epoch, buf, buf_size);
                if (nr < 0)
                        goto fail;
-               rw->count = merge_objlist(vnodes, nr_vnodes, (uint64_t 
*)rw->buf,
+               rw->count = merge_objlist(vnodes, nr_vnodes, rw->oids,
                                          rw->count, (uint64_t *)buf, nr, 
nr_objs);
        }
 
@@ -1700,7 +1700,7 @@ static void __start_recovery(struct work *work, int idx)
                eprintf("failed to open %s, %s, %m\n", tmp_path, 
strerror(errno));
                goto fail;
        }
-       ret = write(fd, rw->buf, sizeof(uint64_t) * rw->count);
+       ret = write(fd, rw->oids, sizeof(*rw->oids) * rw->count);
        if (ret != sizeof(uint64_t) * rw->count) {
                eprintf("failed to write to %s, %m\n", tmp_path);
                close(fd);
@@ -1729,7 +1729,7 @@ int start_recovery(uint32_t epoch)
        if (!rw)
                return -1;
 
-       rw->buf = malloc(1 << 20); /* FIXME */
+       rw->oids = malloc(1 << 20); /* FIXME */
        rw->epoch = epoch;
        rw->count = 0;
 
-- 
1.5.6.5

-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to