Enforce that all internal commands have the SD_SHEEP_PROTO_VER protocol
version, and any external command that has a protocol version has the
right (0x01) one.  Also bump SD_SHEEP_PROTO_VER to 0x05 for the upcoming
0.4.0 release which has lots of internal protocol changes.

Signed-off-by: Christoph Hellwig <[email protected]>

---
 collie/cluster.c         |   38 +++++++++++---------------------------
 collie/collie.c          |    3 +--
 collie/common.c          |   15 ++++++---------
 collie/debug.c           |    7 ++-----
 collie/node.c            |    8 ++------
 collie/vdi.c             |   31 +++++++++++--------------------
 include/internal_proto.h |    7 ++++---
 include/sheep.h          |    7 +++++++
 sheep/gateway.c          |    3 +++
 sheep/group.c            |    3 +--
 sheep/object_cache.c     |   16 +++++++++-------
 sheep/ops.c              |    6 +-----
 sheep/recovery.c         |    6 ++----
 sheep/sdnet.c            |   17 +++++++++++++++++
 sheep/store.c            |   15 +++++++--------
 15 files changed, 84 insertions(+), 98 deletions(-)

Index: sheepdog/include/internal_proto.h
===================================================================
--- sheepdog.orig/include/internal_proto.h      2012-07-06 13:38:49.523234843 
+0200
+++ sheepdog/include/internal_proto.h   2012-07-06 13:39:15.069901357 +0200
@@ -19,7 +19,7 @@
 
 #include <stdint.h>
 
-#define SD_SHEEP_PROTO_VER 0x04
+#define SD_SHEEP_PROTO_VER 0x05
 
 #define SD_DEFAULT_REDUNDANCY 3
 #define SD_MAX_REDUNDANCY 8
@@ -31,8 +31,9 @@
 
 /*
  * Operations with opcodes above 0x80 are considered part of the inter-sheep
- * protocol and will in the near future be versioned independently of the
- * external sheepdog protocol.
+ * protocol and are versioned using SD_SHEEP_PROTO_VER instead of SD_PROTO_VER.
+ *
+ * These same applies for the above 0x80 flags and error values below.
  */
 #define SD_OP_DEL_VDI        0x81
 #define SD_OP_GET_NODE_LIST  0x82
Index: sheepdog/sheep/ops.c
===================================================================
--- sheepdog.orig/sheep/ops.c   2012-07-06 13:37:53.256568513 +0200
+++ sheepdog/sheep/ops.c        2012-07-06 13:39:15.069901357 +0200
@@ -162,9 +162,6 @@ static int cluster_get_vdi_info(struct r
        void *tag;
        int ret;
 
-       if (hdr->proto_ver != SD_PROTO_VER)
-               return SD_RES_VER_MISMATCH;
-
        if (hdr->data_length == SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN)
                tag = (char *)req->data + SD_MAX_VDI_LEN;
        else if (hdr->data_length == SD_MAX_VDI_LEN)
@@ -608,8 +605,7 @@ static int read_copy_from_replica(struct
                rlen = SD_DATA_OBJ_SIZE;
                wlen = 0;
 
-               memset(&hdr, 0, sizeof(hdr));
-               hdr.opcode = SD_OP_READ_PEER;
+               sd_init_req(&hdr, SD_OP_READ_PEER);
                hdr.epoch = epoch;
                hdr.data_length = rlen;
 
Index: sheepdog/sheep/sdnet.c
===================================================================
--- sheepdog.orig/sheep/sdnet.c 2012-07-06 13:37:52.683235184 +0200
+++ sheepdog/sheep/sdnet.c      2012-07-06 13:39:15.069901357 +0200
@@ -296,6 +296,23 @@ static void queue_request(struct request
        struct sd_req *hdr = &req->rq;
        struct sd_rsp *rsp = &req->rp;
 
+       /*
+        * Check the protocol version for all internal commands, and public
+        * commands that have it set.  We can't enforce it on all public
+        * ones as it isn't a mandatory part of the public protocol.
+        */
+       if (hdr->opcode >= 0x80) {
+               if (hdr->proto_ver != SD_SHEEP_PROTO_VER) {
+                       rsp->result = SD_RES_VER_MISMATCH;
+                       goto done;
+               }
+       } else if (hdr->proto_ver) {
+               if (hdr->proto_ver != SD_PROTO_VER) {
+                       rsp->result = SD_RES_VER_MISMATCH;
+                       goto done;
+               }
+       }
+
        req->op = get_sd_op(hdr->opcode);
        if (!req->op) {
                eprintf("invalid opcode %d\n", hdr->opcode);
Index: sheepdog/collie/cluster.c
===================================================================
--- sheepdog.orig/collie/cluster.c      2012-07-06 13:37:11.516568762 +0200
+++ sheepdog/collie/cluster.c   2012-07-06 13:39:15.069901357 +0200
@@ -45,11 +45,10 @@ static int list_store(void)
        if (fd < 0)
                return EXIT_SYSFAIL;
 
-       memset(&hdr, 0, sizeof(hdr));
-
        wlen = 0;
        rlen = 512;
-       hdr.opcode = SD_OP_GET_STORE_LIST;
+
+       sd_init_req(&hdr, SD_OP_GET_STORE_LIST);
        hdr.data_length = rlen;
 
        ret = exec_req(fd, &hdr, buf, &wlen, &rlen);
@@ -87,9 +86,7 @@ static int cluster_format(int argc, char
 
        gettimeofday(&tv, NULL);
 
-       memset(&hdr, 0, sizeof(hdr));
-
-       hdr.opcode = SD_OP_MAKE_FS;
+       sd_init_req((struct sd_req *)&hdr, SD_OP_MAKE_FS);
        hdr.copies = cluster_cmd_data.copies;
        if (cluster_cmd_data.nohalt)
                set_nohalt(&hdr.flags);
@@ -149,9 +146,7 @@ again:
        if (fd < 0)
                goto error;
 
-       memset(&hdr, 0, sizeof(hdr));
-
-       hdr.opcode = SD_OP_STAT_CLUSTER;
+       sd_init_req(&hdr, SD_OP_STAT_CLUSTER);
        hdr.epoch = sd_epoch;
        hdr.data_length = log_length;
 
@@ -220,9 +215,7 @@ static int cluster_shutdown(int argc, ch
        if (fd < 0)
                return EXIT_SYSFAIL;
 
-       memset(&hdr, 0, sizeof(hdr));
-
-       hdr.opcode = SD_OP_SHUTDOWN;
+       sd_init_req(&hdr, SD_OP_SHUTDOWN);
        hdr.epoch = sd_epoch;
 
        rlen = 0;
@@ -255,9 +248,7 @@ static int restore_snap(uint32_t epoch)
        if (fd < 0)
                return EXIT_SYSFAIL;
 
-       memset(&hdr, 0, sizeof(hdr));
-
-       hdr.opcode = SD_OP_RESTORE;
+       sd_init_req(&hdr, SD_OP_RESTORE);
        hdr.obj.tgt_epoch = epoch;
 
        rlen = 0;
@@ -309,11 +300,10 @@ static int list_snap(void)
        if (fd < 0)
                goto out;
 
-       memset(&hdr, 0, sizeof(hdr));
-
        wlen = 0;
        rlen = SD_DATA_OBJ_SIZE;
-       hdr.opcode = SD_OP_GET_SNAP_FILE;
+
+       sd_init_req(&hdr, SD_OP_GET_SNAP_FILE);
        hdr.data_length = rlen;
 
        ret = exec_req(fd, &hdr, buf, &wlen, &rlen);
@@ -348,9 +338,7 @@ static int do_snapshot(void)
        if (fd < 0)
                return EXIT_SYSFAIL;
 
-       memset(&hdr, 0, sizeof(hdr));
-
-       hdr.opcode = SD_OP_SNAPSHOT;
+       sd_init_req(&hdr, SD_OP_SNAPSHOT);
 
        rlen = 0;
        wlen = 0;
@@ -394,9 +382,7 @@ static int cluster_cleanup(int argc, cha
        if (fd < 0)
                return EXIT_SYSFAIL;
 
-       memset(&hdr, 0, sizeof(hdr));
-
-       hdr.opcode = SD_OP_CLEANUP;
+       sd_init_req(&hdr, SD_OP_CLEANUP);
 
        rlen = 0;
        wlen = 0;
@@ -450,9 +436,7 @@ static int cluster_recover(int argc, cha
                        return EXIT_SUCCESS;
        }
 
-       memset(&hdr, 0, sizeof(hdr));
-
-       hdr.opcode = SD_OP_RECOVER;
+       sd_init_req(&hdr, SD_OP_RECOVER);
        hdr.epoch = sd_epoch;
 
        rlen = 0;
Index: sheepdog/collie/collie.c
===================================================================
--- sheepdog.orig/collie/collie.c       2012-07-06 13:37:11.516568762 +0200
+++ sheepdog/collie/collie.c    2012-07-06 13:39:15.073234690 +0200
@@ -80,8 +80,7 @@ static int update_node_list(int max_node
                goto out;
        }
 
-       memset(&hdr, 0, sizeof(hdr));
-       hdr.opcode = SD_OP_GET_NODE_LIST;
+       sd_init_req((struct sd_req *)&hdr, SD_OP_GET_NODE_LIST);
        hdr.request_ver = epoch;
 
        hdr.data_length = size;
Index: sheepdog/collie/common.c
===================================================================
--- sheepdog.orig/collie/common.c       2012-07-06 13:38:25.213234989 +0200
+++ sheepdog/collie/common.c    2012-07-06 13:39:15.073234690 +0200
@@ -56,9 +56,8 @@ int sd_read_object(uint64_t oid, void *d
                return SD_RES_EIO;
        }
 
-       memset(&hdr, 0, sizeof(hdr));
+       sd_init_req(&hdr, SD_OP_READ_OBJ);
        hdr.epoch = sd_epoch;
-       hdr.opcode = SD_OP_READ_OBJ;
        hdr.data_length = rlen;
 
        hdr.obj.oid = oid;
@@ -95,12 +94,12 @@ int sd_write_object(uint64_t oid, uint64
                return SD_RES_EIO;
        }
 
-       memset(&hdr, 0, sizeof(hdr));
-       hdr.epoch = sd_epoch;
        if (create)
-               hdr.opcode = SD_OP_CREATE_AND_WRITE_OBJ;
+               sd_init_req(&hdr, SD_OP_CREATE_AND_WRITE_OBJ);
        else
-               hdr.opcode = SD_OP_WRITE_OBJ;
+               sd_init_req(&hdr, SD_OP_WRITE_OBJ);
+
+       hdr.epoch = sd_epoch;
        hdr.data_length = wlen;
        hdr.flags = flags | SD_FLAG_CMD_WRITE;
 
@@ -140,9 +139,7 @@ int parse_vdi(vdi_parser_func_t func, si
                return fd;
        }
 
-       memset(&req, 0, sizeof(req));
-
-       req.opcode = SD_OP_READ_VDIS;
+       sd_init_req(&req, SD_OP_READ_VDIS);
        req.data_length = sizeof(vdi_inuse);
        req.epoch = sd_epoch;
 
Index: sheepdog/collie/debug.c
===================================================================
--- sheepdog.orig/collie/debug.c        2012-07-06 13:37:11.516568762 +0200
+++ sheepdog/collie/debug.c     2012-07-06 13:39:15.073234690 +0200
@@ -45,8 +45,7 @@ static int do_trace_cat(void)
        if (fd < 0)
                return EXIT_SYSFAIL;
 
-       memset(&hdr, 0, sizeof(hdr));
-       hdr.opcode = SD_OP_TRACE_CAT;
+       sd_init_req(&hdr, SD_OP_TRACE_CAT);
        hdr.data_length = rlen = TRACE_BUF_LEN;
        hdr.epoch = sd_epoch;
 
@@ -102,9 +101,7 @@ static int debug_trace(int argc, char **
        if (fd < 0)
                return EXIT_SYSFAIL;
 
-       memset(&hdr, 0, sizeof(hdr));
-
-       hdr.opcode = SD_OP_TRACE;
+       sd_init_req(&hdr, SD_OP_TRACE);
        hdr.epoch = sd_epoch;
        hdr.data_length = enabled;
 
Index: sheepdog/collie/node.c
===================================================================
--- sheepdog.orig/collie/node.c 2012-07-06 13:37:11.516568762 +0200
+++ sheepdog/collie/node.c      2012-07-06 13:39:15.073234690 +0200
@@ -73,9 +73,7 @@ static int node_info(int argc, char **ar
                if (fd < 0)
                        return 1;
 
-               memset(&req, 0, sizeof(req));
-
-               req.opcode = SD_OP_STAT_SHEEP;
+               sd_init_req((struct sd_req *)&req, SD_OP_STAT_SHEEP);
                req.epoch = sd_epoch;
 
                wlen = 0;
@@ -140,9 +138,7 @@ static int node_recovery(int argc, char
                if (fd < 0)
                        return EXIT_FAILURE;
 
-               memset(&req, 0, sizeof(req));
-
-               req.opcode = SD_OP_STAT_RECOVERY;
+               sd_init_req((struct sd_req *)&req, SD_OP_STAT_RECOVERY);
 
                wlen = 0;
                rlen = 0;
Index: sheepdog/collie/vdi.c
===================================================================
--- sheepdog.orig/collie/vdi.c  2012-07-06 13:37:11.516568762 +0200
+++ sheepdog/collie/vdi.c       2012-07-06 13:39:15.073234690 +0200
@@ -280,9 +280,7 @@ static void parse_objs(uint64_t oid, obj
                if (fd < 0)
                        break;
 
-               memset(&hdr, 0, sizeof(hdr));
-
-               hdr.opcode = SD_OP_READ_PEER;
+               sd_init_req(&hdr, SD_OP_READ_PEER);
                hdr.data_length = rlen;
                hdr.flags = 0;
                hdr.epoch = sd_epoch;
@@ -371,11 +369,10 @@ static int find_vdi_name(char *vdiname,
        strncpy(buf, vdiname, SD_MAX_VDI_LEN);
        strncpy(buf + SD_MAX_VDI_LEN, tag, SD_MAX_VDI_TAG_LEN);
 
-       memset(&hdr, 0, sizeof(hdr));
        if (for_snapshot)
-               hdr.opcode = SD_OP_GET_VDI_INFO;
+               sd_init_req(&hdr, SD_OP_GET_VDI_INFO);
        else
-               hdr.opcode = SD_OP_LOCK_VDI;
+               sd_init_req(&hdr, SD_OP_LOCK_VDI);
        wlen = SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN;
        hdr.proto_ver = SD_PROTO_VER;
        hdr.data_length = wlen;
@@ -422,8 +419,7 @@ static int do_vdi_create(char *vdiname,
 
        wlen = SD_MAX_VDI_LEN;
 
-       memset(&hdr, 0, sizeof(hdr));
-       hdr.opcode = SD_OP_NEW_VDI;
+       sd_init_req(&hdr, SD_OP_NEW_VDI);
        hdr.flags = SD_FLAG_CMD_WRITE;
        hdr.data_length = wlen;
 
@@ -709,12 +705,10 @@ static int vdi_delete(int argc, char **a
        if (fd < 0)
                return EXIT_SYSFAIL;
 
-       memset(&hdr, 0, sizeof(hdr));
-
        rlen = 0;
        wlen = sizeof(vdiname);
 
-       hdr.opcode = SD_OP_DEL_VDI;
+       sd_init_req(&hdr, SD_OP_DEL_VDI);
        hdr.epoch = sd_epoch;
        hdr.flags = SD_FLAG_CMD_WRITE;
        hdr.data_length = wlen;
@@ -828,9 +822,7 @@ again:
        if (fd < 0)
                goto error;
 
-       memset(&hdr, 0, sizeof(hdr));
-
-       hdr.opcode = SD_OP_STAT_CLUSTER;
+       sd_init_req(&hdr, SD_OP_STAT_CLUSTER);
        hdr.epoch = sd_epoch;
        hdr.data_length = log_length;
 
@@ -952,8 +944,7 @@ static int find_vdi_attr_oid(char *vdina
                return SD_RES_EIO;
        }
 
-       memset(&hdr, 0, sizeof(hdr));
-       hdr.opcode = SD_OP_GET_VDI_ATTR;
+       sd_init_req(&hdr, SD_OP_GET_VDI_ATTR);
        wlen = SD_ATTR_OBJ_SIZE;
        rlen = 0;
        hdr.proto_ver = SD_PROTO_VER;
@@ -1318,7 +1309,7 @@ out:
 
 static void *read_object_from(struct sd_vnode *vnode, uint64_t oid)
 {
-       struct sd_req hdr = { 0 };
+       struct sd_req hdr;
        struct sd_rsp *rsp = (struct sd_rsp *)&hdr;
        int fd, ret;
        unsigned wlen = 0, rlen = SD_DATA_OBJ_SIZE;
@@ -1339,7 +1330,7 @@ static void *read_object_from(struct sd_
                exit(EXIT_FAILURE);
        }
 
-       hdr.opcode = SD_OP_READ_PEER;
+       sd_init_req(&hdr, SD_OP_READ_PEER);
        hdr.epoch = sd_epoch;
        hdr.flags = 0;
        hdr.data_length = rlen;
@@ -1364,7 +1355,7 @@ static void *read_object_from(struct sd_
 
 static void write_object_to(struct sd_vnode *vnode, uint64_t oid, void *buf)
 {
-       struct sd_req hdr = { 0 };
+       struct sd_req hdr;
        struct sd_rsp *rsp = (struct sd_rsp *)&hdr;
        int fd, ret;
        unsigned wlen = SD_DATA_OBJ_SIZE, rlen = 0;
@@ -1378,7 +1369,7 @@ static void write_object_to(struct sd_vn
                exit(EXIT_FAILURE);
        }
 
-       hdr.opcode = SD_OP_WRITE_PEER;
+       sd_init_req(&hdr, SD_OP_WRITE_PEER);
        hdr.epoch = sd_epoch;
        hdr.flags = SD_FLAG_CMD_WRITE;
        hdr.data_length = wlen;
Index: sheepdog/include/sheep.h
===================================================================
--- sheepdog.orig/include/sheep.h       2012-07-06 13:37:11.516568762 +0200
+++ sheepdog/include/sheep.h    2012-07-06 13:39:15.073234690 +0200
@@ -39,6 +39,13 @@ struct trace_graph_item {
        unsigned long long return_time;
 };
 
+static inline void sd_init_req(struct sd_req *req, uint8_t opcode)
+{
+       memset(req, 0, sizeof(*req));
+       req->opcode = opcode;
+       req->proto_ver = opcode < 0x80 ? SD_PROTO_VER : SD_SHEEP_PROTO_VER;
+}
+
 static inline int same_node(struct sd_vnode *e, int n1, int n2)
 {
        if (memcmp(e[n1].nid.addr, e[n2].nid.addr, sizeof(e->nid.addr)) == 0 &&
Index: sheepdog/sheep/gateway.c
===================================================================
--- sheepdog.orig/sheep/gateway.c       2012-07-06 13:37:11.516568762 +0200
+++ sheepdog/sheep/gateway.c    2012-07-06 13:39:15.073234690 +0200
@@ -59,6 +59,7 @@ int gateway_read_obj(struct request *req
 
                memcpy(&fwd_hdr, &req->rq, sizeof(fwd_hdr));
                fwd_hdr.opcode = SD_OP_READ_PEER;
+               fwd_hdr.proto_ver = SD_SHEEP_PROTO_VER;
 
                v = obj_vnodes[idx];
                if (vnode_is_local(v))
@@ -238,6 +239,7 @@ static int do_gateway_write_obj(struct r
                fwd_hdr.opcode = SD_OP_CREATE_AND_WRITE_PEER;
        else
                fwd_hdr.opcode = SD_OP_WRITE_PEER;
+       fwd_hdr.proto_ver = SD_SHEEP_PROTO_VER;
 
        wlen = fwd_hdr.data_length;
 
@@ -320,6 +322,7 @@ int gateway_remove_obj(struct request *r
        write_info_init(&wi);
        memcpy(&fwd_hdr, &req->rq, sizeof(fwd_hdr));
        fwd_hdr.opcode = SD_OP_REMOVE_PEER;
+       fwd_hdr.proto_ver = SD_SHEEP_PROTO_VER;
 
        wlen = fwd_hdr.data_length;
 
Index: sheepdog/sheep/group.c
===================================================================
--- sheepdog.orig/sheep/group.c 2012-07-06 13:37:11.516568762 +0200
+++ sheepdog/sheep/group.c      2012-07-06 13:39:15.076568024 +0200
@@ -662,8 +662,7 @@ static int get_vdi_bitmap_from(struct sd
 
        vprintf(SDOG_ERR, "%s:%d\n", host, node->nid.port);
 
-       memset(&hdr, 0, sizeof(hdr));
-       hdr.opcode = SD_OP_READ_VDIS;
+       sd_init_req(&hdr, SD_OP_READ_VDIS);
        hdr.epoch = sys->epoch;
        hdr.data_length = sizeof(tmp_vdi_inuse);
        rlen = hdr.data_length;
Index: sheepdog/sheep/object_cache.c
===================================================================
--- sheepdog.orig/sheep/object_cache.c  2012-07-06 13:37:11.516568762 +0200
+++ sheepdog/sheep/object_cache.c       2012-07-06 13:39:15.076568024 +0200
@@ -495,7 +495,7 @@ out:
 /* Fetch the object, cache it in success */
 static int object_cache_pull(struct object_cache *oc, uint32_t idx)
 {
-       struct sd_req hdr = { 0 };
+       struct sd_req hdr;
        int ret = SD_RES_NO_MEM;
        uint64_t oid;
        uint32_t data_length;
@@ -515,7 +515,7 @@ static int object_cache_pull(struct obje
                goto out;
        }
 
-       hdr.opcode = SD_OP_READ_OBJ;
+       sd_init_req(&hdr, SD_OP_READ_OBJ);
        hdr.data_length = data_length;
        hdr.obj.oid = oid;
        hdr.obj.offset = 0;
@@ -581,8 +581,10 @@ static int push_cache_object(uint32_t vi
        if (ret != SD_RES_SUCCESS)
                goto out;
 
-       memset(&hdr, 0, sizeof(hdr));
-       hdr.opcode = create ? SD_OP_CREATE_AND_WRITE_OBJ : SD_OP_WRITE_OBJ;
+       if (create)
+               sd_init_req(&hdr, SD_OP_CREATE_AND_WRITE_OBJ);
+       else
+               sd_init_req(&hdr, SD_OP_WRITE_OBJ);
        hdr.flags = SD_FLAG_CMD_WRITE;
        hdr.data_length = data_length;
        hdr.obj.oid = oid;
@@ -790,9 +792,9 @@ int object_cache_write(uint64_t oid, cha
                return SD_RES_NO_MEM;
 
        if (create)
-               req->rq.opcode = SD_OP_CREATE_AND_WRITE_OBJ;
+               sd_init_req(&req->rq, SD_OP_CREATE_AND_WRITE_OBJ);
        else
-               req->rq.opcode = SD_OP_WRITE_OBJ;
+               sd_init_req(&req->rq, SD_OP_WRITE_OBJ);
        req->rq.flags = flags | SD_FLAG_CMD_WRITE;
        req->rq.data_length = datalen;
 
@@ -823,7 +825,7 @@ int object_cache_read(uint64_t oid, char
        if (!req)
                return SD_RES_NO_MEM;
 
-       req->rq.opcode = SD_OP_READ_OBJ;
+       sd_init_req(&req->rq, SD_OP_READ_OBJ);
        req->rq.data_length = datalen;
 
        req->rq.obj.oid = oid;
Index: sheepdog/sheep/recovery.c
===================================================================
--- sheepdog.orig/sheep/recovery.c      2012-07-06 13:37:11.516568762 +0200
+++ sheepdog/sheep/recovery.c   2012-07-06 13:39:15.076568024 +0200
@@ -102,8 +102,7 @@ static int recover_object_from_replica(u
                goto out;
        }
 
-       memset(&hdr, 0, sizeof(hdr));
-       hdr.opcode = SD_OP_READ_PEER;
+       sd_init_req(&hdr, SD_OP_READ_PEER);
        hdr.epoch = epoch;
        hdr.flags = SD_FLAG_CMD_RECOVERY;
        hdr.data_length = rlen;
@@ -489,8 +488,7 @@ static int fetch_object_list(struct sd_n
        wlen = 0;
        rlen = buf_size;
 
-       memset(&hdr, 0, sizeof(hdr));
-       hdr.opcode = SD_OP_GET_OBJ_LIST;
+       sd_init_req((struct sd_req *)&hdr, SD_OP_GET_OBJ_LIST);
        hdr.tgt_epoch = epoch - 1;
        hdr.flags = 0;
        hdr.data_length = rlen;
Index: sheepdog/sheep/store.c
===================================================================
--- sheepdog.orig/sheep/store.c 2012-07-06 13:37:11.516568762 +0200
+++ sheepdog/sheep/store.c      2012-07-06 13:39:15.076568024 +0200
@@ -113,8 +113,7 @@ int epoch_log_read_remote(uint32_t epoch
                        continue;
                }
 
-               memset(&hdr, 0, sizeof(hdr));
-               hdr.opcode = SD_OP_GET_EPOCH;
+               sd_init_req(&hdr, SD_OP_GET_EPOCH);
                hdr.data_length = rlen = len;
                hdr.obj.tgt_epoch = epoch;
 
@@ -501,8 +500,10 @@ int write_object(uint64_t oid, char *dat
                }
        }
 
-       memset(&hdr, 0, sizeof(hdr));
-       hdr.opcode = create ? SD_OP_CREATE_AND_WRITE_OBJ : SD_OP_WRITE_OBJ;
+       if (create)
+               sd_init_req(&hdr, SD_OP_CREATE_AND_WRITE_OBJ);
+       else
+               sd_init_req(&hdr, SD_OP_WRITE_OBJ);
        hdr.flags = flags | SD_FLAG_CMD_WRITE;
        hdr.data_length = datalen;
 
@@ -537,8 +538,7 @@ int read_object(uint64_t oid, char *data
        }
 
 forward_read:
-       memset(&hdr, 0, sizeof(hdr));
-       hdr.opcode = SD_OP_READ_OBJ;
+       sd_init_req(&hdr, SD_OP_READ_OBJ);
        hdr.data_length = datalen;
        hdr.obj.oid = oid;
        hdr.obj.offset = offset;
@@ -555,8 +555,7 @@ int remove_object(uint64_t oid)
        struct sd_req hdr;
        int ret;
 
-       memset(&hdr, 0, sizeof(hdr));
-       hdr.opcode = SD_OP_REMOVE_OBJ;
+       sd_init_req(&hdr, SD_OP_REMOVE_OBJ);
        hdr.obj.oid = oid;
 
        ret = exec_local_req(&hdr, NULL);

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

Reply via email to