]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mount.ceph: clean up return codes
authorJeff Layton <jlayton@redhat.com>
Tue, 13 Aug 2019 13:28:20 +0000 (09:28 -0400)
committerJeff Layton <jlayton@redhat.com>
Fri, 13 Sep 2019 12:14:48 +0000 (08:14 -0400)
Mount helpers should return a specific mask as the return value so
that the caller can interpret what happened. These are detailed in
mount(8) and are already defined in mtab.c.

Fix the helper to return appropriate error codes for different
failure modes. Also, add a goto out target so we can ensure that we
do proper cleanup on failure.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
src/mount/mount.ceph.c

index a7c52a439e8e28a676ff69f4aed256c7db75b71d..fbf3f0046333962cfaf1f94e3ecf51b21f32a6e1 100644 (file)
@@ -339,13 +339,15 @@ int main(int argc, char *argv[])
        retval = parse_arguments(argc, argv, &src, &node, &opts);
        if (retval) {
                usage(argv[0]);
-               exit((retval > 0) ? EXIT_SUCCESS : EXIT_FAILURE);
+               retval = (retval > 0) ? 0 : EX_USAGE;
+               goto out;
        }
 
        rsrc = mount_resolve_src(src);
        if (!rsrc) {
                printf("failed to resolve source\n");
-               exit(1);
+               retval = EX_USAGE;
+               goto out;
        }
 
        /* Ensure the ceph key_type is available */
@@ -354,13 +356,14 @@ int main(int argc, char *argv[])
        popts = parse_options(opts, &flags);
        if (!popts) {
                printf("failed to parse ceph_options\n");
-               exit(1);
+               retval = EX_USAGE;
+               goto out;
        }
 
        block_signals(SIG_BLOCK);
 
        if (mount(rsrc, node, "ceph", flags, popts)) {
-               retval = errno;
+               retval = EX_FAIL;
                switch (errno) {
                case ENODEV:
                        printf("mount error: ceph filesystem not supported by the system\n");
@@ -375,9 +378,9 @@ int main(int argc, char *argv[])
        }
 
        block_signals(SIG_UNBLOCK);
-
+out:
        free(popts);
        free(rsrc);
-       exit(retval);
+       return retval;
 }