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>
{
struct libmnt_table *fstab, *mtab;
const char *o, *tgt;
+ char *pattern;
int rc, mounted = 0;
if (ignored)
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;
}