All the macros are mutually exclusive in the SD_FLAG_CMD_XXX group,
so the new added flag cannot be set as 0x11 because
SD_FLAG_CMD_WRITE is already 0x01.

Secondly, the new added flag is renamed to SD_FLAG_CMD_PIGGYBACK
which stands for returning something back while sending something
to sheep.

Signed-off-by: Ruoyu <lian...@ucweb.com>
---
 dog/vdi.c                | 2 +-
 include/sheepdog_proto.h | 4 +++-
 lib/net.c                | 8 ++++----
 3 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/dog/vdi.c b/dog/vdi.c
index 93ae763..2e3f7b3 100644
--- a/dog/vdi.c
+++ b/dog/vdi.c
@@ -1065,7 +1065,7 @@ static int do_vdi_check_exist(const struct sd_inode 
*inode)
        rb_for_each_entry(entry, &oid_tree, rb) {
                sd_init_req(&hdr, SD_OP_OIDS_EXIST);
                hdr.data_length = sizeof(uint64_t) * entry->last;
-               hdr.flags = SD_FLAG_CMD_FILTER;
+               hdr.flags = SD_FLAG_CMD_WRITE | SD_FLAG_CMD_PIGGYBACK;
                int ret = dog_exec_req(&entry->node->nid, &hdr, entry->oids);
                if (ret < 0)
                        panic("dog_exec_req() failure.");
diff --git a/include/sheepdog_proto.h b/include/sheepdog_proto.h
index b4e1e13..7cfdccb 100644
--- a/include/sheepdog_proto.h
+++ b/include/sheepdog_proto.h
@@ -46,11 +46,13 @@
 #define SD_OP_FLUSH_VDI      0x16
 #define SD_OP_DEL_VDI        0x17
 
+/* macros in the SD_FLAG_CMD_XXX group are mutually exclusive */
 #define SD_FLAG_CMD_WRITE    0x01
 #define SD_FLAG_CMD_COW      0x02
 #define SD_FLAG_CMD_CACHE    0x04
 #define SD_FLAG_CMD_DIRECT   0x08 /* don't use object cache */
-#define SD_FLAG_CMD_FILTER   0x11 /* write & read, output is subset of input */
+/* return something back while sending something to sheep */
+#define SD_FLAG_CMD_PIGGYBACK   0x10
 /* flags above 0x80 are sheepdog-internal */
 
 #define SD_RES_SUCCESS       0x00 /* Success */
diff --git a/lib/net.c b/lib/net.c
index 552e945..02b328e 100644
--- a/lib/net.c
+++ b/lib/net.c
@@ -333,10 +333,10 @@ int exec_req(int sockfd, struct sd_req *hdr, void *data,
 
        if (hdr->flags & SD_FLAG_CMD_WRITE) {
                wlen = hdr->data_length;
-               rlen = 0;
-       } else if (hdr->flags & SD_FLAG_CMD_FILTER) {
-               wlen = hdr->data_length;
-               rlen = hdr->data_length;
+               if (hdr->flags & SD_FLAG_CMD_PIGGYBACK)
+                       rlen = hdr->data_length;
+               else
+                       rlen = 0;
        } else {
                wlen = 0;
                rlen = hdr->data_length;
-- 
1.8.3.2


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

Reply via email to