From: Liu Yuan <[email protected]> We should allocate different sizes for vdi and data object, instead of fixed size for both.
Signed-off-by: Liu Yuan <[email protected]> --- sheep/simple_store.c | 5 +++-- sheep/store.c | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sheep/simple_store.c b/sheep/simple_store.c index e1cfeca..7cdad31 100644 --- a/sheep/simple_store.c +++ b/sheep/simple_store.c @@ -84,6 +84,7 @@ static int store_write_last_sector(uint64_t oid, struct siocb *iocb) const int size = SECTOR_SIZE; char *buf = NULL; int ret; + uint32_t length = iocb->length; buf = valloc(size); if (!buf) { @@ -94,7 +95,7 @@ static int store_write_last_sector(uint64_t oid, struct siocb *iocb) iocb->buf = buf; iocb->length = size; - iocb->offset = SD_DATA_OBJ_SIZE - size; + iocb->offset = length - size; ret = simple_store_write(oid, iocb); free(buf); @@ -139,7 +140,7 @@ static int simple_store_open(uint64_t oid, struct siocb *iocb, int create) /* * Preallocate the whole object to get a better filesystem layout. */ - ret = fallocate(iocb->fd, 0, 0, SD_DATA_OBJ_SIZE); + ret = fallocate(iocb->fd, 0, 0, iocb->length); if (ret < 0) { if (errno != ENOSYS && errno != EOPNOTSUPP) { ret = SD_RES_EIO; diff --git a/sheep/store.c b/sheep/store.c index 0a1932d..e2fd0ee 100644 --- a/sheep/store.c +++ b/sheep/store.c @@ -648,6 +648,7 @@ int store_create_and_write_obj(const struct sd_req *req, struct sd_rsp *rsp, voi memset(&iocb, 0, sizeof(iocb)); iocb.epoch = epoch; iocb.flags = hdr->flags; + iocb.length = hdr->data_length; ret = sd_store->open(hdr->oid, &iocb, 1); if (ret != SD_RES_SUCCESS) return ret; -- 1.7.8.2 -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
