diff options
author | NeilBrown <neilb@suse.de> | 2012-07-16 08:43:28 -0400 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2012-07-16 08:53:32 -0400 |
commit | 76908c3f14a12e865054ea5d6e4cad201c28839a (patch) | |
tree | 723919d08d2264b0e6de86d9fc8d3ad14569fd22 | |
parent | fd27c638898010438d404cd17120729ef1d680e2 (diff) | |
download | nfs-utils-76908c3f14a12e865054ea5d6e4cad201c28839a.tar.gz nfs-utils-76908c3f14a12e865054ea5d6e4cad201c28839a.tar.xz nfs-utils-76908c3f14a12e865054ea5d6e4cad201c28839a.zip |
mount.nfs: restore correct error status when umount fails
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>
-rw-r--r-- | utils/mount/mount_libmount.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/utils/mount/mount_libmount.c b/utils/mount/mount_libmount.c index e8f17a9..5c1116a 100644 --- a/utils/mount/mount_libmount.c +++ b/utils/mount/mount_libmount.c @@ -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) |