summaryrefslogtreecommitdiffstats
path: root/libmount/src
diff options
context:
space:
mode:
authorKarel Zak2018-03-06 14:44:23 +0100
committerKarel Zak2018-03-06 14:44:23 +0100
commit76de2157cf579c98620535c2d6352096063aa2b1 (patch)
treeefdfbd194661d4722d890a5f074310a963e132b0 /libmount/src
parentdocs: add script(1) events idea to TODO (diff)
downloadkernel-qcow2-util-linux-76de2157cf579c98620535c2d6352096063aa2b1.tar.gz
kernel-qcow2-util-linux-76de2157cf579c98620535c2d6352096063aa2b1.tar.xz
kernel-qcow2-util-linux-76de2157cf579c98620535c2d6352096063aa2b1.zip
libmount: fix fs pattern usage in mount --all
The command "mount -a -t <pattern>" uses the -t as pattern to filter fstab entries. And "mount -t <type>" is used to specify FS type. Unfortunately libmount does not care about this difference when it calls standard mount functionality. The original pattern is still in the library control struct and mnt_do_mount() tries to use it as FS type. This patch is just bugfix. Maybe the long term solution would be to differentiate between the pattern and type in the library API. Now the library follows mount(8) command line and it's little bit messy. Reported-by: Lukas Czerner <lczerner@redhat.com> Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libmount/src')
-rw-r--r--libmount/src/context_mount.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/libmount/src/context_mount.c b/libmount/src/context_mount.c
index 139fb5a28..fc07ca184 100644
--- a/libmount/src/context_mount.c
+++ b/libmount/src/context_mount.c
@@ -1175,6 +1175,7 @@ int mnt_context_next_mount(struct libmnt_context *cxt,
{
struct libmnt_table *fstab, *mtab;
const char *o, *tgt;
+ char *pattern;
int rc, mounted = 0;
if (ignored)
@@ -1254,7 +1255,18 @@ int mnt_context_next_mount(struct libmnt_context *cxt,
rc = mnt_context_set_fs(cxt, *fs);
if (!rc) {
+ /*
+ * "-t <pattern>" is used to filter out fstab entries, but for ordinary
+ * mount operation -t means "-t <type>". We have to zeroize the pattern
+ * to avoid misinterpretation.
+ */
+ pattern = cxt->fstype_pattern;
+ cxt->fstype_pattern = NULL;
+
rc = mnt_context_mount(cxt);
+
+ cxt->fstype_pattern = pattern;
+
if (mntrc)
*mntrc = rc;
}