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:
Ned Bass 2015-03-26 12:10:26 -07:00 committed by Brian Behlendorf
parent 95a6990d9a
commit 9540be9b23
2 changed files with 14 additions and 14 deletions

View File

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

View File

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