[sheepdog] [PATCH] collie: calculate buffer size from object type
MORITA Kazutaka
morita.kazutaka at gmail.com
Sat May 4 11:20:25 CEST 2013
From: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
The current vdi check doesn't use the correct buffer size for vdi objects.
Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
collie/vdi.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/collie/vdi.c b/collie/vdi.c
index a527191..660f792 100644
--- a/collie/vdi.c
+++ b/collie/vdi.c
@@ -1309,13 +1309,14 @@ static void *read_object_from(const struct sd_vnode *vnode, uint64_t oid)
int ret;
char name[128];
void *buf;
+ size_t size = get_objsize(oid);
- buf = xmalloc(SD_DATA_OBJ_SIZE);
+ buf = xmalloc(size);
sd_init_req(&hdr, SD_OP_READ_PEER);
hdr.epoch = sd_epoch;
hdr.flags = 0;
- hdr.data_length = SD_DATA_OBJ_SIZE;
+ hdr.data_length = size;
hdr.obj.oid = oid;
@@ -1328,7 +1329,7 @@ static void *read_object_from(const struct sd_vnode *vnode, uint64_t oid)
switch (rsp->result) {
case SD_RES_SUCCESS:
untrim_zero_sectors(buf, rsp->obj.offset, rsp->data_length,
- SD_DATA_OBJ_SIZE);
+ size);
break;
case SD_RES_NO_OBJ:
free(buf);
@@ -1355,7 +1356,7 @@ static void write_object_to(const struct sd_vnode *vnode, uint64_t oid,
sd_init_req(&hdr, SD_OP_WRITE_PEER);
hdr.epoch = sd_epoch;
hdr.flags = SD_FLAG_CMD_WRITE;
- hdr.data_length = SD_DATA_OBJ_SIZE;
+ hdr.data_length = get_objsize(oid);
hdr.obj.oid = oid;
addr_to_str(name, sizeof(name), vnode->nid.addr, 0);
@@ -1380,10 +1381,11 @@ static void write_object_to(const struct sd_vnode *vnode, uint64_t oid,
static void do_check_repair(uint64_t oid, int nr_copies)
{
const struct sd_vnode *tgt_vnodes[SD_MAX_COPIES];
- void *buf = xmalloc(SD_DATA_OBJ_SIZE), *buf_cmp;
+ size_t size = get_objsize(oid);
+ void *buf = xmalloc(size), *buf_cmp;
int i, ret;
- ret = sd_read_object(oid, buf, SD_DATA_OBJ_SIZE, 0, true);
+ ret = sd_read_object(oid, buf, size, 0, true);
if (ret != SD_RES_SUCCESS) {
fprintf(stderr, "FATAL: read %"PRIx64" failed\n", oid);
exit(EXIT_FAILURE);
@@ -1397,7 +1399,7 @@ static void do_check_repair(uint64_t oid, int nr_copies)
fprintf(stdout, "fixed missing %"PRIx64"\n", oid);
continue;
}
- if (memcmp(buf, buf_cmp, SD_DATA_OBJ_SIZE)) {
+ if (memcmp(buf, buf_cmp, size)) {
write_object_to(tgt_vnodes[i], oid, buf, false);
fprintf(stdout, "fixed replica %"PRIx64"\n", oid);
}
--
1.7.9.5
More information about the sheepdog
mailing list