zpool import should honor overlay property
Make the 'zpool import' command honor the overlay property to allow filesystems to be mounted on a non-empty directory. As it stands now this property is only checked by the 'zfs mount' command. Move the check into 'zfs_mount()` in libzpool so the property is honored for all callers. Signed-off-by: Ned Bass <bass6@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #3227
This commit is contained in:
parent
95a6990d9a
commit
9540be9b23
|
@ -5641,7 +5641,6 @@ share_mount_one(zfs_handle_t *zhp, int op, int flags, char *protocol,
|
||||||
char mountpoint[ZFS_MAXPROPLEN];
|
char mountpoint[ZFS_MAXPROPLEN];
|
||||||
char shareopts[ZFS_MAXPROPLEN];
|
char shareopts[ZFS_MAXPROPLEN];
|
||||||
char smbshareopts[ZFS_MAXPROPLEN];
|
char smbshareopts[ZFS_MAXPROPLEN];
|
||||||
char overlay[ZFS_MAXPROPLEN];
|
|
||||||
const char *cmdname = op == OP_SHARE ? "share" : "mount";
|
const char *cmdname = op == OP_SHARE ? "share" : "mount";
|
||||||
struct mnttab mnt;
|
struct mnttab mnt;
|
||||||
uint64_t zoned, canmount;
|
uint64_t zoned, canmount;
|
||||||
|
@ -5748,19 +5747,6 @@ share_mount_one(zfs_handle_t *zhp, int op, int flags, char *protocol,
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Overlay mounts are disabled by default but may be enabled
|
|
||||||
* via the 'overlay' property or the 'zfs mount -O' option.
|
|
||||||
*/
|
|
||||||
if (!(flags & MS_OVERLAY)) {
|
|
||||||
if (zfs_prop_get(zhp, ZFS_PROP_OVERLAY, overlay,
|
|
||||||
sizeof (overlay), NULL, NULL, 0, B_FALSE) == 0) {
|
|
||||||
if (strcmp(overlay, "on") == 0) {
|
|
||||||
flags |= MS_OVERLAY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* At this point, we have verified that the mountpoint and/or
|
* At this point, we have verified that the mountpoint and/or
|
||||||
* shareopts are appropriate for auto management. If the
|
* shareopts are appropriate for auto management. If the
|
||||||
|
|
|
@ -388,6 +388,7 @@ zfs_mount(zfs_handle_t *zhp, const char *options, int flags)
|
||||||
struct stat buf;
|
struct stat buf;
|
||||||
char mountpoint[ZFS_MAXPROPLEN];
|
char mountpoint[ZFS_MAXPROPLEN];
|
||||||
char mntopts[MNT_LINE_MAX];
|
char mntopts[MNT_LINE_MAX];
|
||||||
|
char overlay[ZFS_MAXPROPLEN];
|
||||||
libzfs_handle_t *hdl = zhp->zfs_hdl;
|
libzfs_handle_t *hdl = zhp->zfs_hdl;
|
||||||
int remount = 0, rc;
|
int remount = 0, rc;
|
||||||
|
|
||||||
|
@ -441,6 +442,19 @@ zfs_mount(zfs_handle_t *zhp, const char *options, int flags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Overlay mounts are disabled by default but may be enabled
|
||||||
|
* via the 'overlay' property or the 'zfs mount -O' option.
|
||||||
|
*/
|
||||||
|
if (!(flags & MS_OVERLAY)) {
|
||||||
|
if (zfs_prop_get(zhp, ZFS_PROP_OVERLAY, overlay,
|
||||||
|
sizeof (overlay), NULL, NULL, 0, B_FALSE) == 0) {
|
||||||
|
if (strcmp(overlay, "on") == 0) {
|
||||||
|
flags |= MS_OVERLAY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine if the mountpoint is empty. If so, refuse to perform the
|
* Determine if the mountpoint is empty. If so, refuse to perform the
|
||||||
* mount. We don't perform this check if 'remount' is
|
* mount. We don't perform this check if 'remount' is
|
||||||
|
|
Loading…
Reference in New Issue