From: Ruoyu <[email protected]>

As titled. A command line crash as below is also fixed.

$ dog node md plug -A
dog exits unexpectedly (Segmentation fault).
dog() [0x405dda]
/lib/x86_64-linux-gnu/libpthread.so.0(+0xfbaf) [0x7fd6003c9baf]
dog() [0x40d8b2]
dog() [0x40706e]
dog() [0x40398c]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf4) [0x7fd600013de4]
dog() [0x403cea]
Segmentation fault

Signed-off-by: Ruoyu <[email protected]>
Signed-off-by: Liu Yuan <[email protected]>
---
 dog/node.c | 29 +++++++++++++++++++++--------
 1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/dog/node.c b/dog/node.c
index 68e83f9..c72b39d 100644
--- a/dog/node.c
+++ b/dog/node.c
@@ -396,11 +396,19 @@ static int node_md_info(struct node_id *nid)
                uint64_t size = info.disk[i].free + info.disk[i].used;
                int ratio = (int)(((double)info.disk[i].used / size) * 100);
 
-               fprintf(stdout, "%2d\t%s\t%s\t%s\t%3d%%\t%s\n",
-                       info.disk[i].idx, strnumber(size),
-                       strnumber(info.disk[i].used),
-                       strnumber(info.disk[i].free),
-                       ratio, info.disk[i].path);
+               if (raw_output)
+                       fprintf(stdout, "%s %d %s %s %s %d%% %s\n",
+                               addr_to_str(nid->addr, nid->port),
+                               info.disk[i].idx, strnumber(size),
+                               strnumber(info.disk[i].used),
+                               strnumber(info.disk[i].free),
+                               ratio, info.disk[i].path);
+               else
+                       fprintf(stdout, "%2d\t%s\t%s\t%s\t%3d%%\t%s\n",
+                               info.disk[i].idx, strnumber(size),
+                               strnumber(info.disk[i].used),
+                               strnumber(info.disk[i].free),
+                               ratio, info.disk[i].path);
        }
        return EXIT_SUCCESS;
 }
@@ -410,13 +418,15 @@ static int md_info(int argc, char **argv)
        struct sd_node *n;
        int ret, i = 0;
 
-       fprintf(stdout, "Id\tSize\tUsed\tAvail\tUse%%\tPath\n");
+       if (!raw_output)
+               fprintf(stdout, "Id\tSize\tUsed\tAvail\tUse%%\tPath\n");
 
        if (!node_cmd_data.all_nodes)
                return node_md_info(&sd_nid);
 
        rb_for_each_entry(n, &sd_nroot, rb) {
-               fprintf(stdout, "Node %d:\n", i++);
+               if (!raw_output)
+                       fprintf(stdout, "Node %d:\n", i++);
                ret = node_md_info(&n->nid);
                if (ret != EXIT_SUCCESS)
                        return EXIT_FAILURE;
@@ -430,6 +440,9 @@ static int do_plug_unplug(char *disks, bool plug)
        struct sd_rsp *rsp = (struct sd_rsp *)&hdr;
        int ret;
 
+       if (!disks)
+               return EXIT_USAGE;
+
        if (!strlen(disks)) {
                sd_err("Empty path isn't allowed");
                return EXIT_FAILURE;
@@ -604,7 +617,7 @@ static struct subcommand node_cmd[] = {
         CMD_NEED_NODELIST, node_info},
        {"recovery", NULL, "aphPr", "show recovery information of nodes", NULL,
         CMD_NEED_NODELIST, node_recovery, node_options},
-       {"md", "[disks]", "apAh", "See 'dog node md' for more information",
+       {"md", "[disks]", "aprAh", "See 'dog node md' for more information",
         node_md_cmd, CMD_NEED_ARG, node_md, node_options},
        {"stat", NULL, "aprwh", "show stat information about the node", NULL,
         0, node_stat, node_options},
-- 
1.9.1

-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to