]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
mount.nfs: restore correct error status when umount fails
authorNeilBrown <neilb@suse.de>
Mon, 16 Jul 2012 12:43:28 +0000 (08:43 -0400)
committerSteve Dickson <steved@redhat.com>
Mon, 16 Jul 2012 12:53:32 +0000 (08:53 -0400)
If nfs-utils is built without --enable-libmount-mount, then
an unmount that failed due to the filesystem being busy will
exit with '16' - EX_FILEIO.
Autofs apparently relies on this.

When built with --enable-libmount-mount, the same case will
exit with '32' - EX_FAIL.  Normally this is reserved for
internal errors.

This patch restores the use of EX_FILEIO for errors from umount.

Reviewed-by: Karel Zak <kzak@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Steve Dickson <steved@redhat.com>
utils/mount/mount_libmount.c

index e8f17a9c5910fcb2494d59639e760017b82da2a2..5c1116a5786d585262cf61e59d8312e4784b5763 100644 (file)
@@ -173,6 +173,7 @@ static int umount_main(struct libmnt_context *cxt, int argc, char **argv)
 {
        int rc, c;
        char *spec = NULL, *opts = NULL;
+       int ret = EX_FAIL;
 
        static const struct option longopts[] = {
                { "force", 0, 0, 'f' },
@@ -243,7 +244,7 @@ static int umount_main(struct libmnt_context *cxt, int argc, char **argv)
                        /* strange, no entry in mtab or /proc not mounted */
                        nfs_umount23(spec, "tcp,v3");
        }
-
+       ret = EX_FILEIO;
        rc = mnt_context_do_umount(cxt);        /* call umount(2) syscall */
        mnt_context_finalize_mount(cxt);        /* mtab update */
 
@@ -252,12 +253,10 @@ static int umount_main(struct libmnt_context *cxt, int argc, char **argv)
                umount_error(rc, spec);
                goto err;
        }
-
-       free(opts);
-       return EX_SUCCESS;
+       ret = EX_SUCCESS;
 err:
        free(opts);
-       return EX_FAIL;
+       return ret;
 }
 
 static int mount_main(struct libmnt_context *cxt, int argc, char **argv)