On 03/14/2012 10:21 AM, Liu Yuan wrote: > 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; >
Applied. Yuan -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
