diff options
author | Karel Zak | 2012-02-24 23:03:22 +0100 |
---|---|---|
committer | Karel Zak | 2012-02-24 23:17:06 +0100 |
commit | 16b73aae8cb73df2974fd75c2a42ec3b92535851 (patch) | |
tree | 34e9477d286b5b5b18767e2dcee3209b7e7c66a2 /sys-utils/mount.c | |
parent | libmount: canonicalize targets from fstab on mount -a (diff) | |
download | kernel-qcow2-util-linux-16b73aae8cb73df2974fd75c2a42ec3b92535851.tar.gz kernel-qcow2-util-linux-16b73aae8cb73df2974fd75c2a42ec3b92535851.tar.xz kernel-qcow2-util-linux-16b73aae8cb73df2974fd75c2a42ec3b92535851.zip |
mount: (new) cleanup mount -a return codes
New return codes:
0 : all mounted (or all ignored)
64 : some mounted, some failed
32 : all failed
Note that already mounted or ignored (filtered out by -t or -O)
filesystems don't affect the final return code.
The original mount(8) returns 0 instead of 64, so the situation
"some mounted, some failed" cannot be detected.
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils/mount.c')
-rw-r--r-- | sys-utils/mount.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/sys-utils/mount.c b/sys-utils/mount.c index 17991b0fb..3fbac04a1 100644 --- a/sys-utils/mount.c +++ b/sys-utils/mount.c @@ -182,6 +182,8 @@ static int mount_all(struct libmnt_context *cxt) struct libmnt_fs *fs; int mntrc, ignored, rc = MOUNT_EX_SUCCESS; + int nsucc = 0, nerrs = 0; + itr = mnt_new_iter(MNT_ITER_FORWARD); if (!itr) { warn(_("failed to initialize libmount iterator")); @@ -197,31 +199,40 @@ static int mount_all(struct libmnt_context *cxt) printf(ignored == 1 ? _("%-25s: ignored\n") : _("%-25s: already mounted\n"), tgt); - } else if (mnt_context_is_fork(cxt)) { if (mnt_context_is_verbose(cxt)) printf("%-25s: mount successfully forked\n", tgt); } else { - rc |= mk_exit_code(cxt, mntrc); + mk_exit_code(cxt, mntrc); /* to print warnings */ if (mnt_context_get_status(cxt)) { - rc |= MOUNT_EX_SOMEOK; + nsucc++; if (mnt_context_is_verbose(cxt)) printf("%-25s: successfully mounted\n", tgt); - } + } else + nerrs++; } } if (mnt_context_is_parent(cxt)) { /* wait for mount --fork children */ - int nerrs = 0, nchildren = 0; + int nchildren = 0; + + nerrs = 0, nsucc = 0; rc = mnt_context_wait_for_children(cxt, &nchildren, &nerrs); if (!rc && nchildren) - rc = nchildren == nerrs ? MOUNT_EX_FAIL : MOUNT_EX_SOMEOK; + nsucc = nchildren - nerrs; } + if (nerrs == 0) + rc = MOUNT_EX_SUCCESS; /* all success */ + else if (nsucc == 0) + rc = MOUNT_EX_FAIL; /* all failed */ + else + rc = MOUNT_EX_SOMEOK; /* some success, some failed */ + mnt_free_iter(itr); return rc; } |