Page MenuHomeFreeBSD

D23132.id.diff
No OneTemporary

D23132.id.diff

Index: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
===================================================================
--- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
+++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
@@ -769,6 +769,7 @@
extern boolean_t is_mounted(libzfs_handle_t *, const char *special, char **);
extern boolean_t zfs_is_mounted(zfs_handle_t *, char **);
extern int zfs_mount(zfs_handle_t *, const char *, int);
+extern int zfs_mount_at(zfs_handle_t *, const char *, int, const char *);
extern int zfs_unmount(zfs_handle_t *, const char *, int);
extern int zfs_unmountall(zfs_handle_t *, int);
Index: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c
===================================================================
--- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c
+++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c
@@ -301,6 +301,17 @@
return (is_mounted(zhp->zfs_hdl, zfs_get_name(zhp), where));
}
+static boolean_t
+zfs_is_mountable_internal(zfs_handle_t *zhp, const char *mountpoint)
+{
+
+ if (zfs_prop_get_int(zhp, ZFS_PROP_ZONED) &&
+ getzoneid() == GLOBAL_ZONEID)
+ return (B_FALSE);
+
+ return (B_TRUE);
+}
+
/*
* Returns true if the given dataset is mountable, false otherwise. Returns the
* mountpoint in 'buf'.
@@ -325,8 +336,7 @@
if (zfs_prop_get_int(zhp, ZFS_PROP_CANMOUNT) == ZFS_CANMOUNT_OFF)
return (B_FALSE);
- if (zfs_prop_get_int(zhp, ZFS_PROP_ZONED) &&
- getzoneid() == GLOBAL_ZONEID)
+ if (!zfs_is_mountable_internal(zhp, buf))
return (B_FALSE);
if (source)
@@ -341,8 +351,19 @@
int
zfs_mount(zfs_handle_t *zhp, const char *options, int flags)
{
- struct stat buf;
char mountpoint[ZFS_MAXPROPLEN];
+
+ if (!zfs_is_mountable(zhp, mountpoint, sizeof (mountpoint), NULL))
+ return (0);
+
+ return (zfs_mount_at(zhp, options, flags, mountpoint));
+}
+
+int
+zfs_mount_at(zfs_handle_t *zhp, const char *options, int flags,
+ const char *mountpoint)
+{
+ struct stat buf;
char mntopts[MNT_LINE_MAX];
libzfs_handle_t *hdl = zhp->zfs_hdl;
@@ -357,8 +378,8 @@
if (zpool_get_prop_int(zhp->zpool_hdl, ZPOOL_PROP_READONLY, NULL))
flags |= MS_RDONLY;
- if (!zfs_is_mountable(zhp, mountpoint, sizeof (mountpoint), NULL))
- return (0);
+ if (!zfs_is_mountable_internal(zhp, mountpoint))
+ return (B_FALSE);
/* Create the directory if it doesn't already exist */
if (lstat(mountpoint, &buf) != 0) {

File Metadata

Mime Type
text/plain
Expires
Tue, Apr 21, 10:36 PM (13 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31937126
Default Alt Text
D23132.id.diff (2 KB)

Event Timeline