[Sheepdog] [PATCH] collie: fix vdi_object() read size

Liu Yuan namei.unix at gmail.com
Thu Nov 24 04:48:40 CET 2011


From: Liu Yuan <tailai.ly at taobao.com>

This fixes the bug for command 'collie vdi object image -i x'

Since now we don't support short read, for data object, we have
to pass the exact size, or we'll sheep daemon will error out.

Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
---
 collie/vdi.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/collie/vdi.c b/collie/vdi.c
index d9f8bdb..444e8a4 100644
--- a/collie/vdi.c
+++ b/collie/vdi.c
@@ -246,7 +246,7 @@ static void get_data_oid(char *sheep, uint64_t oid, struct sd_obj_rsp *rsp,
 	}
 }
 
-static void parse_objs(uint64_t oid, obj_parser_func_t func, void *data)
+static void parse_objs(uint64_t oid, obj_parser_func_t func, void *data, unsigned size)
 {
 	char name[128];
 	int i, fd, ret;
@@ -259,7 +259,7 @@ static void parse_objs(uint64_t oid, obj_parser_func_t func, void *data)
 	}
 
 	for (i = 0; i < nr_nodes; i++) {
-		unsigned wlen = 0, rlen = sizeof(struct sheepdog_inode);
+		unsigned wlen = 0, rlen = size;
 		struct sd_obj_req hdr;
 		struct sd_obj_rsp *rsp = (struct sd_obj_rsp *)&hdr;
 
@@ -752,7 +752,7 @@ static int vdi_object(int argc, char **argv)
 	if (idx == ~0) {
 		printf("Looking for the inode object 0x%" PRIx32 " with %d nodes\n\n",
 		       vid, nr_nodes);
-		parse_objs(vid_to_vdi_oid(vid), do_print_obj, NULL);
+		parse_objs(vid_to_vdi_oid(vid), do_print_obj, NULL, SD_INODE_SIZE);
 	} else {
 		struct get_data_oid_info old_info;
 
@@ -764,7 +764,7 @@ static int vdi_object(int argc, char **argv)
 			exit(EXIT_FAILURE);
 		}
 
-		parse_objs(vid_to_vdi_oid(vid), get_data_oid, &old_info);
+		parse_objs(vid_to_vdi_oid(vid), get_data_oid, &old_info, SD_DATA_OBJ_SIZE);
 
 		if (old_info.success) {
 			if (old_info.data_oid) {
@@ -772,7 +772,7 @@ static int vdi_object(int argc, char **argv)
 				       " (the inode vid 0x%" PRIx32 " idx %u) with %d nodes\n\n",
 				       old_info.data_oid, vid, idx, nr_nodes);
 
-				parse_objs(old_info.data_oid, do_print_obj, NULL);
+				parse_objs(old_info.data_oid, do_print_obj, NULL, SD_DATA_OBJ_SIZE);
 			} else
 				printf("The inode object 0x%" PRIx32 " idx %u is not allocated\n",
 				       vid, idx);
-- 
1.7.8.rc3




More information about the sheepdog mailing list