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