*/
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;
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) {
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
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
.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.