From: Liu Yuan <[email protected]> Object size for vdi_attr obj is never right, though it didn't cause problem, just bigger than it really needs.
- use SD_INODE_SIZE for inode size - fix object size passed to store_create_and_write() Signed-off-by: Liu Yuan <[email protected]> --- sheep/store.c | 24 +++++++++++++++--------- 1 files changed, 15 insertions(+), 9 deletions(-) diff --git a/sheep/store.c b/sheep/store.c index b66f136..b679001 100644 --- a/sheep/store.c +++ b/sheep/store.c @@ -644,11 +644,19 @@ int store_create_and_write_obj(const struct sd_req *req, struct sd_rsp *rsp, voi uint32_t epoch = hdr->epoch; char *buf = NULL; struct siocb iocb; + unsigned data_length; + + if (is_vdi_obj(hdr->oid)) + data_length = SD_INODE_SIZE; + else if (is_vdi_attr_obj(hdr->oid)) + data_length = SD_ATTR_OBJ_SIZE; + else + data_length = SD_DATA_OBJ_SIZE; memset(&iocb, 0, sizeof(iocb)); iocb.epoch = epoch; iocb.flags = hdr->flags; - iocb.length = hdr->data_length; + iocb.length = data_length; ret = sd_store->open(hdr->oid, &iocb, 1); if (ret != SD_RES_SUCCESS) return ret; @@ -697,9 +705,9 @@ static int fix_object_consistency(struct request *req) int old_opcode = hdr->opcode; if (is_vdi_obj(hdr->oid)) - data_length = sizeof(struct sheepdog_inode); + data_length = SD_INODE_SIZE; else if (is_vdi_attr_obj(hdr->oid)) - data_length = SD_MAX_VDI_ATTR_VALUE_LEN; + data_length = SD_ATTR_OBJ_SIZE; else data_length = SD_DATA_OBJ_SIZE; @@ -1156,11 +1164,9 @@ static void *alloc_buffer_for(uint64_t oid) void *buf = NULL; if (is_vdi_obj(oid)) - buf = xmalloc(sizeof(struct sheepdog_inode)); + buf = xmalloc(SD_INODE_SIZE); else if (is_vdi_attr_obj(oid)) - buf = xmalloc(SD_MAX_VDI_ATTR_VALUE_LEN); - else if (is_data_obj(oid)) - buf = valloc(SD_DATA_OBJ_SIZE); + buf = xmalloc(SD_ATTR_OBJ_SIZE); else buf = xmalloc(SD_DATA_OBJ_SIZE); @@ -1227,9 +1233,9 @@ static int recover_object_from_replica(uint64_t oid, goto out; } if (is_vdi_obj(oid)) - rlen = sizeof(struct sheepdog_inode); + rlen = SD_INODE_SIZE; else if (is_vdi_attr_obj(oid)) - rlen = SD_MAX_VDI_ATTR_VALUE_LEN; + rlen = SD_ATTR_OBJ_SIZE; else rlen = SD_DATA_OBJ_SIZE; -- 1.7.8.2 -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
