diff options
author | Karel Zak | 2014-12-18 10:30:14 +0100 |
---|---|---|
committer | Karel Zak | 2014-12-18 10:47:39 +0100 |
commit | 01966ce852ac6c46e7e35a8e4f981dea88620ff8 (patch) | |
tree | 07764c970d4bffbc4180bd43964a882f27e05d46 | |
parent | login-utils: Enable building util-linux against OpenPAM (diff) | |
download | kernel-qcow2-util-linux-01966ce852ac6c46e7e35a8e4f981dea88620ff8.tar.gz kernel-qcow2-util-linux-01966ce852ac6c46e7e35a8e4f981dea88620ff8.tar.xz kernel-qcow2-util-linux-01966ce852ac6c46e7e35a8e4f981dea88620ff8.zip |
libmount: allow unspecified source on remount
kernel does not require mount source (e.g. device name) on remount, it
means that fstab/mtab/mountinfo should be optional in this case.
For example:
mount -o rw,remount /
has to work on system without mounted /proc.
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r-- | libmount/src/context.c | 10 | ||||
-rw-r--r-- | sys-utils/mount.8 | 14 |
2 files changed, 17 insertions, 7 deletions
diff --git a/libmount/src/context.c b/libmount/src/context.c index a320b3e6b..14fa44b52 100644 --- a/libmount/src/context.c +++ b/libmount/src/context.c @@ -2025,7 +2025,7 @@ static int apply_table(struct libmnt_context *cxt, struct libmnt_table *tb, */ int mnt_context_apply_fstab(struct libmnt_context *cxt) { - int rc = -1; + int rc = -1, isremount = 0; struct libmnt_table *tab = NULL; const char *src = NULL, *tgt = NULL; unsigned long mflags = 0; @@ -2056,6 +2056,7 @@ int mnt_context_apply_fstab(struct libmnt_context *cxt) DBG(CXT, ul_debugobj(cxt, "force mtab parsing on remount")); cxt->optsmode |= MNT_OMODE_MTAB; cxt->optsmode &= ~MNT_OMODE_FSTAB; + isremount = 1; } if (cxt->fs) { @@ -2109,6 +2110,13 @@ int mnt_context_apply_fstab(struct libmnt_context *cxt) rc = apply_table(cxt, tab, MNT_ITER_BACKWARD); } if (rc) { + if (!mnt_context_is_restricted(cxt) + && tgt && !src + && isremount) { + DBG(CXT, ul_debugobj(cxt, "only target; ignore missing mtab entry on remount")); + return 0; + } + DBG(CXT, ul_debugobj(cxt, "failed to find entry in fstab/mtab [rc=%d]: %m", rc)); /* force to "not found in fstab/mtab" error, the details why diff --git a/sys-utils/mount.8 b/sys-utils/mount.8 index 272fd7d80..6fa8a275a 100644 --- a/sys-utils/mount.8 +++ b/sys-utils/mount.8 @@ -1072,9 +1072,10 @@ Attempt to remount an already-mounted filesystem. This is commonly used to change the mount flags for a filesystem, especially to make a readonly filesystem writable. It does not change device or mount point. -The remount functionality follows the standard way the mount command works -with options from fstab. This means that the mount command only doesn't -read fstab (or mtab) when both the +The remount functionality follows the standard way the mount command works with +options, but preferred source for the options is mtab (or /proc/self/mouninfo) +rather than fstab. The mount command only does not read mtab +when both the .I device and .I dir @@ -1083,15 +1084,16 @@ are specified. .B "mount \-o remount,rw /dev/foo /dir" After this call all old mount options are replaced and arbitrary stuff from -fstab is ignored, except the loop= option which is internally generated and +mtab is ignored, except the loop= option which is internally generated and maintained by the mount command. .B "mount \-o remount,rw /dir" -After this call mount reads fstab (or mtab) and merges these options with +After this call mount reads mtab and merges these options with the options from the command line (\c .B \-o\c -). +). If no mtab (or /proc/self/mountinfo) is available than remount with unspecified +source is allowed. .TP .B ro Mount the filesystem read-only. |