Hi, On Thu, Apr 8, 2010 at 12:33 AM, Wido den Hollander <wido at pcextreme.nl> wrote: > Hi, > > I'm using the latest version (git revision) of Sheepdog, but when > getting "obj" information, shepherd segfaults: > > root at wido-desktop:~# shepherd info -t obj Wido > 457951fcbfc62f1 > 0, 27ca81e942cd0eef, 3207b6b8f585c0b6, 457951fcbfc62f1 > 1, 3207b6b8f585c0b6, 4f5de28d9ad07d49, 457951fcbfc62f1 > 2, 4f5de28d9ad07d49, d3d995c9a4f4336a, 457951fcbfc62f1 > Looking for the inode object 0x80fe96ac00000000 with 4 nodes > > Segmentation fault Thanks for your report! Can you try the following patch? diff --git a/shepherd/shepherd.c b/shepherd/shepherd.c index 1949f13..087c397 100644 --- a/shepherd/shepherd.c +++ b/shepherd/shepherd.c @@ -777,9 +777,15 @@ static void parse_objs(uint64_t oid, obj_parser_func_t func, void *data) { char name[128]; int i, fd, ret; + char *buf; + + buf = zalloc(sizeof(struct sheepdog_inode)); + if (!buf) { + fprintf(stderr, "out of memory\n"); + return; + } for (i = 0; i < nr_nodes; i++) { - char buf[sizeof(struct sheepdog_inode)]; unsigned wlen = 0, rlen = sizeof(buf); struct sd_obj_req hdr; struct sd_obj_rsp *rsp = (struct sd_obj_rsp *)&hdr; @@ -808,6 +814,8 @@ static void parse_objs(uint64_t oid, obj_parser_func_t func, void *data) else func(name, oid, rsp, buf, data); } + + free(buf); } static void print_obj(char *vdiname, unsigned index) |