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>
This commit is contained in:
Karel Zak 2014-12-18 10:30:14 +01:00
parent fe2c9909cd
commit 01966ce852
2 changed files with 17 additions and 7 deletions

View File

@ -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

View File

@ -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.