Whamcloud - gitweb
LU-15142 lctl: fixes for set_param -P and llog_print
[fs/lustre-release.git] / lustre / utils / obd.c
index 5a4ee67..0cf763a 100644 (file)
@@ -2819,7 +2819,7 @@ out:
  */
 int jt_llog_print_iter(char *logname, long start, long end,
                       int (record_cb)(const char *record, void *private),
-                      void *private, bool reverse)
+                      void *private, bool reverse, bool raw)
 {
        struct obd_ioctl_data data = { 0 };
        char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf;
@@ -2852,6 +2852,7 @@ retry:
                snprintf(endbuf, sizeof(endbuf), "%lu",
                         end < rec + inc - 1 ? end : rec + inc - 1);
 
+               data.ioc_u32_1 = raw ? 1 : 0;
                /* start and end record numbers are passed as ASCII digits */
                data.ioc_inlbuf2 = startbuf;
                data.ioc_inllen2 = strlen(startbuf) + 1;
@@ -2895,14 +2896,15 @@ out:
        return rc;
 }
 
-static int llog_parse_catalog_start_end(int *argc, char **argv[],
-                                       char **catalog, long *start, long *end)
+static int llog_parse_catalog_options(int *argc, char ***argv, char **catalog,
+                                     long *start, long *end, int *raw)
 {
        const struct option long_opts[] = {
        /* the --catalog option is not required, just for consistency */
        { .val = 'c',   .name = "catalog",      .has_arg = required_argument },
        { .val = 'e',   .name = "end",          .has_arg = required_argument },
        { .val = 'h',   .name = "help",         .has_arg = no_argument },
+       { .val = 'r',   .name = "raw",          .has_arg = no_argument },
        { .val = 's',   .name = "start",        .has_arg = required_argument },
        { .name = NULL } };
        char *cmd = (*argv)[0];
@@ -2913,7 +2915,7 @@ static int llog_parse_catalog_start_end(int *argc, char **argv[],
                return -EINVAL;
 
        /* now process command line arguments*/
-       while ((c = getopt_long(*argc, *argv, "c:e:hs:",
+       while ((c = getopt_long(*argc, *argv, "c:e:hrs:",
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'c':
@@ -2927,6 +2929,11 @@ static int llog_parse_catalog_start_end(int *argc, char **argv[],
                                return CMD_HELP;
                        }
                        break;
+               case 'r':
+                       if (!raw)
+                               return CMD_HELP;
+                       *raw = 1;
+                       break;
                case 's':
                        *start = strtol(optarg, &endp, 0);
                        if (*endp != '\0') {
@@ -3016,9 +3023,11 @@ int jt_llog_print(int argc, char **argv)
 {
        char *catalog = NULL;
        long start = 1, end = -1;
+       int raw = 0;
        int rc;
 
-       rc = llog_parse_catalog_start_end(&argc, &argv, &catalog, &start, &end);
+       rc = llog_parse_catalog_options(&argc, &argv, &catalog, &start, &end,
+                                       &raw);
        if (rc)
                return rc;
 
@@ -3026,7 +3035,7 @@ int jt_llog_print(int argc, char **argv)
                return CMD_INCOMPLETE;
 
        rc = jt_llog_print_iter(catalog, start, end, jt_llog_print_cb,
-                               NULL, false);
+                               NULL, false, !!raw);
 
        llog_default_device(LLOG_DFLT_DEV_RESET);
 
@@ -3041,7 +3050,7 @@ int jt_llog_print(int argc, char **argv)
  * The positional arguments option should eventually be phased out.
  */
 static int llog_parse_catalog_log_idx(int *argc, char ***argv, const char *opts,
-                                     int max_args, struct obd_ioctl_data *data)
+                                     struct obd_ioctl_data *data)
 {
        const struct option long_opts[] = {
        /* the --catalog option is not required, just for consistency */
@@ -3108,7 +3117,7 @@ int jt_llog_cancel(int argc, char **argv)
                return CMD_INCOMPLETE;
 
        /* Parse catalog file (in inlbuf1) and named parameters */
-       rc = llog_parse_catalog_log_idx(&argc, &argv, "c:hi:l:", 3, &data);
+       rc = llog_parse_catalog_log_idx(&argc, &argv, "c:hi:l:", &data);
 
        /*
         * Handle old positional parameters if not using named parameters,
@@ -3160,7 +3169,8 @@ int jt_llog_check(int argc, char **argv)
        char *cmd = argv[0];
        int rc;
 
-       rc = llog_parse_catalog_start_end(&argc, &argv, &catalog, &start, &end);
+       rc = llog_parse_catalog_options(&argc, &argv, &catalog, &start,
+                                       &end, NULL);
        if (rc)
                return rc;
 
@@ -3214,7 +3224,7 @@ int jt_llog_remove(int argc, char **argv)
        if (llog_default_device(LLOG_DFLT_MGS_SET))
                return CMD_INCOMPLETE;
 
-       rc = llog_parse_catalog_log_idx(&argc, &argv, "c:hl:", 2, &data);
+       rc = llog_parse_catalog_log_idx(&argc, &argv, "c:hl:", &data);
        if (rc)
                goto err;
 
@@ -3427,7 +3437,7 @@ static int llog_search_ost(char *logname, long last_index, char *ostname)
        for (end = last_index; end > 1; end -= inc) {
                start = end - inc > 0 ? end - inc : 1;
                rc = jt_llog_print_iter(logname, start, end, llog_search_ost_cb,
-                                       ostname, true);
+                                       ostname, true, false);
                if (rc)
                        break;
        }
@@ -3567,7 +3577,7 @@ static int llog_search_pool(char *logname, long last_index, char *fsname,
        for (end = last_index; end > 1; end -= inc) {
                start = end - inc > 0 ? end - inc : 1;
                rc = jt_llog_print_iter(logname, start, end,
-                                       llog_search_pool_cb, &lpd, true);
+                                       llog_search_pool_cb, &lpd, true, false);
                if (rc) {
                        if (rc == 1 && lpd.lpd_pool_exists)
                                rc = lpd.lpd_ost_num ? 1 : 0;
@@ -4969,7 +4979,8 @@ int llog_poollist(char *fsname, char *poolname)
                strncpy(lpld.lpld_poolname, poolname,
                        sizeof(lpld.lpld_poolname) - 1);
        snprintf(logname, sizeof(logname), "%s-client", fsname);
-       rc = jt_llog_print_iter(logname, 0, -1, llog_poollist_cb, &lpld, false);
+       rc = jt_llog_print_iter(logname, 0, -1, llog_poollist_cb, &lpld, false,
+                               false);
 
        if (poolname && poolname[0])
                printf("Pool: %s.%s\n", fsname, poolname);