Allow '-o remount' for non-legacy datasets
This is done for compatibility with existing Linux infrastructure. In particular, when using zfs as a root filesystem there are init scripts which as part of shutdown remount root read-only. Also, the new systemd infrastructure being used by Fedora expects to be able to remount a file system read-write. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Issue #847
This commit is contained in:
parent
4ab8a725ce
commit
c171ea71bb
|
@ -312,7 +312,7 @@ main(int argc, char **argv)
|
||||||
char badopt[MNT_LINE_MAX] = { '\0' };
|
char badopt[MNT_LINE_MAX] = { '\0' };
|
||||||
char mtabopt[MNT_LINE_MAX] = { '\0' };
|
char mtabopt[MNT_LINE_MAX] = { '\0' };
|
||||||
char *dataset, *mntpoint;
|
char *dataset, *mntpoint;
|
||||||
unsigned long mntflags = 0, zfsflags = 0, remount_ro = 0;
|
unsigned long mntflags = 0, zfsflags = 0, remount = 0;
|
||||||
int sloppy = 0, fake = 0, verbose = 0, nomtab = 0, zfsutil = 0;
|
int sloppy = 0, fake = 0, verbose = 0, nomtab = 0, zfsutil = 0;
|
||||||
int error, c;
|
int error, c;
|
||||||
|
|
||||||
|
@ -417,11 +417,10 @@ main(int argc, char **argv)
|
||||||
" mountopts: \"%s\"\n mtabopts: \"%s\"\n"),
|
" mountopts: \"%s\"\n mtabopts: \"%s\"\n"),
|
||||||
dataset, mntpoint, mntflags, zfsflags, mntopts, mtabopt);
|
dataset, mntpoint, mntflags, zfsflags, mntopts, mtabopt);
|
||||||
|
|
||||||
if (mntflags & MS_REMOUNT)
|
if (mntflags & MS_REMOUNT) {
|
||||||
nomtab = 1;
|
nomtab = 1;
|
||||||
|
remount = 1;
|
||||||
if ((mntflags & MS_REMOUNT) && (mntflags & MS_RDONLY))
|
}
|
||||||
remount_ro = 1;
|
|
||||||
|
|
||||||
if (zfsflags & ZS_ZFSUTIL)
|
if (zfsflags & ZS_ZFSUTIL)
|
||||||
zfsutil = 1;
|
zfsutil = 1;
|
||||||
|
@ -454,9 +453,10 @@ main(int argc, char **argv)
|
||||||
* we differentiate the two cases using the 'zfsutil' mount option.
|
* we differentiate the two cases using the 'zfsutil' mount option.
|
||||||
* This mount option should only be supplied by the 'zfs mount' util.
|
* This mount option should only be supplied by the 'zfs mount' util.
|
||||||
*
|
*
|
||||||
* The only exception to the above rule is '-o remount,ro'. This is
|
* The only exception to the above rule is '-o remount' which is
|
||||||
* always allowed for non-legacy datasets for rc.sysinit/umountroot
|
* always allowed for non-legacy datasets. This is done because when
|
||||||
* to safely remount the root filesystem and flush its cache.
|
* using zfs as your root file system both rc.sysinit/umountroot and
|
||||||
|
* systemd depend on 'mount -o remount <mountpoint>' to work.
|
||||||
*/
|
*/
|
||||||
if (zfsutil && !strcmp(legacy, ZFS_MOUNTPOINT_LEGACY)) {
|
if (zfsutil && !strcmp(legacy, ZFS_MOUNTPOINT_LEGACY)) {
|
||||||
(void) fprintf(stderr, gettext(
|
(void) fprintf(stderr, gettext(
|
||||||
|
@ -467,7 +467,7 @@ main(int argc, char **argv)
|
||||||
return (MOUNT_USAGE);
|
return (MOUNT_USAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!zfsutil && strcmp(legacy, ZFS_MOUNTPOINT_LEGACY) && !remount_ro) {
|
if (!zfsutil && strcmp(legacy, ZFS_MOUNTPOINT_LEGACY) && !remount) {
|
||||||
(void) fprintf(stderr, gettext(
|
(void) fprintf(stderr, gettext(
|
||||||
"filesystem '%s' cannot be mounted using 'mount'.\n"
|
"filesystem '%s' cannot be mounted using 'mount'.\n"
|
||||||
"Use 'zfs set mountpoint=%s' or 'zfs mount %s'.\n"
|
"Use 'zfs set mountpoint=%s' or 'zfs mount %s'.\n"
|
||||||
|
|
Loading…
Reference in New Issue