diff options
author | Ivan Delalande | 2017-07-07 03:27:11 +0200 |
---|---|---|
committer | Karel Zak | 2017-07-18 09:45:26 +0200 |
commit | b9a5e23fa8c0a1b04b7794bfde3885f83a38fdcd (patch) | |
tree | 94af1b28009211c95b5aa28a04f2750a4d242cfa /libmount/src/context.c | |
parent | Merge branch '170711' of github.com:jwpi/util-linux (diff) | |
download | kernel-qcow2-util-linux-b9a5e23fa8c0a1b04b7794bfde3885f83a38fdcd.tar.gz kernel-qcow2-util-linux-b9a5e23fa8c0a1b04b7794bfde3885f83a38fdcd.tar.xz kernel-qcow2-util-linux-b9a5e23fa8c0a1b04b7794bfde3885f83a38fdcd.zip |
libmount: make mnt_context_is_fs_mounted work for /proc
Assume that /proc is not mounted instead of returning an error when we
are unable to open the mounts and mountinfo files in /proc. Also set
cxt->mtab back to NULL so that it gets properly parsed when we check if
the next filesystem is mounted.
The goal is to have mount -a work when /proc is not mounted, typically
with /proc on the first line of fstab.
Signed-off-by: Ivan Delalande <colona@arista.com>
Diffstat (limited to 'libmount/src/context.c')
-rw-r--r-- | libmount/src/context.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/libmount/src/context.c b/libmount/src/context.c index 7c34cad95..e7f1ee934 100644 --- a/libmount/src/context.c +++ b/libmount/src/context.c @@ -33,6 +33,7 @@ #include "mountP.h" #include "fileutils.h" +#include "strutils.h" #include <sys/wait.h> @@ -2458,14 +2459,23 @@ int mnt_context_helper_setopt(struct libmnt_context *cxt, int c, char *arg) int mnt_context_is_fs_mounted(struct libmnt_context *cxt, struct libmnt_fs *fs, int *mounted) { - struct libmnt_table *mtab; + struct libmnt_table *mtab, *orig; int rc; if (!cxt || !fs || !mounted) return -EINVAL; + orig = cxt->mtab; rc = mnt_context_get_mtab(cxt, &mtab); - if (rc) + if (rc == -ENOENT && mnt_fs_streq_target(fs, "/proc") && + (!cxt->mtab_path || startswith(cxt->mtab_path, "/proc/"))) { + if (!orig) { + mnt_unref_table(cxt->mtab); + cxt->mtab = NULL; + } + *mounted = 0; + return 0; /* /proc not mounted */ + } else if (rc) return rc; *mounted = mnt_table_is_fs_mounted(mtab, fs); |