diff options
author | Karel Zak | 2018-03-06 14:44:23 +0100 |
---|---|---|
committer | Karel Zak | 2018-03-06 14:44:23 +0100 |
commit | 76de2157cf579c98620535c2d6352096063aa2b1 (patch) | |
tree | efdfbd194661d4722d890a5f074310a963e132b0 /libmount | |
parent | docs: add script(1) events idea to TODO (diff) | |
download | kernel-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')
-rw-r--r-- | libmount/src/context_mount.c | 12 |
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; } |