]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_io: set exitcode = 1 on parsing errors in scrub/repair command
authorDarrick J. Wong <djwong@kernel.org>
Wed, 20 Dec 2023 16:53:45 +0000 (08:53 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Fri, 22 Dec 2023 02:29:14 +0000 (18:29 -0800)
Set exitcode to 1 if there is an error parsing the CLI arguments to the
scrub or repair commands, like we do most other places in xfs_io.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
io/scrub.c

index fc22ba49f8baafc215198d4d876c8e79e0c03682..8b3bdd779f011bb723676512037c127ca08b7558 100644 (file)
@@ -103,11 +103,14 @@ parse_args(
        while ((c = getopt(argc, argv, "")) != EOF) {
                switch (c) {
                default:
+                       exitcode = 1;
                        return command_usage(cmdinfo);
                }
        }
-       if (optind > argc - 1)
+       if (optind > argc - 1) {
+               exitcode = 1;
                return command_usage(cmdinfo);
+       }
 
        for (i = 0, d = xfrog_scrubbers; i < XFS_SCRUB_TYPE_NR; i++, d++) {
                if (strcmp(d->name, argv[optind]) == 0) {
@@ -117,6 +120,7 @@ parse_args(
        }
        if (type < 0) {
                printf(_("Unknown type '%s'.\n"), argv[optind]);
+               exitcode = 1;
                return command_usage(cmdinfo);
        }
        optind++;
@@ -132,19 +136,22 @@ parse_args(
                                fprintf(stderr,
                                        _("Bad inode number '%s'.\n"),
                                        argv[optind]);
-                               return 0;
+                               exitcode = 1;
+                               return command_usage(cmdinfo);
                        }
                        control2 = strtoul(argv[optind + 1], &p, 0);
                        if (*p != '\0') {
                                fprintf(stderr,
                                        _("Bad generation number '%s'.\n"),
                                        argv[optind + 1]);
-                               return 0;
+                               exitcode = 1;
+                               return command_usage(cmdinfo);
                        }
                } else {
                        fprintf(stderr,
                                _("Must specify inode number and generation.\n"));
-                       return 0;
+                       exitcode = 1;
+                       return command_usage(cmdinfo);
                }
                break;
        case XFROG_SCRUB_TYPE_AGHEADER:
@@ -152,13 +159,15 @@ parse_args(
                if (optind != argc - 1) {
                        fprintf(stderr,
                                _("Must specify one AG number.\n"));
-                       return 0;
+                       exitcode = 1;
+                       return command_usage(cmdinfo);
                }
                control = strtoul(argv[optind], &p, 0);
                if (*p != '\0') {
                        fprintf(stderr,
                                _("Bad AG number '%s'.\n"), argv[optind]);
-                       return 0;
+                       exitcode = 1;
+                       return command_usage(cmdinfo);
                }
                break;
        case XFROG_SCRUB_TYPE_FS:
@@ -166,7 +175,8 @@ parse_args(
                if (optind != argc) {
                        fprintf(stderr,
                                _("No parameters allowed.\n"));
-                       return 0;
+                       exitcode = 1;
+                       return command_usage(cmdinfo);
                }
                break;
        default: