aboutsummaryrefslogtreecommitdiff
path: root/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h
diff options
context:
space:
mode:
authorMartin Matuska <mm@FreeBSD.org>2013-03-17 22:24:08 +0000
committerMartin Matuska <mm@FreeBSD.org>2013-03-17 22:24:08 +0000
commitd97b41582d8f4603222358f33b73d378388c3778 (patch)
tree7397a0f6925bc157850a1a7a5db99ce98102bdc1 /cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h
parentaf2e40ccd1ca76b646750f248ef7d05f221c9d02 (diff)
downloadsrc-d97b41582d8f4603222358f33b73d378388c3778.tar.gz
src-d97b41582d8f4603222358f33b73d378388c3778.zip
Fix working with zfs_ioctl_version in libzfs_compat.h and include mirror
lzc_ioctl_version in libzfs_core
Notes
Notes: svn path=/projects/libzfs_core/; revision=248445
Diffstat (limited to 'cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h')
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h26
1 files changed, 19 insertions, 7 deletions
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h
index 881737d898a1..400c81443be9 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h
@@ -32,8 +32,23 @@
extern "C" {
#endif
+static int zfs_ioctl_version = -1;
static int zfs_kernel_version = 0;
-static int zfs_ioctl_version = 0;
+
+/*
+ * Get zfs_ioctl_version
+ */
+static __inline int
+get_zfs_ioctl_version(void)
+{
+ size_t ver_size;
+ int ver = 0;
+
+ ver_size = sizeof(ver);
+ sysctlbyname("vfs.zfs.version.ioctl", &ver, &ver_size, NULL, 0);
+
+ return (ver);
+}
/*
* This is FreeBSD version of ioctl, because Solaris' ioctl() updates
@@ -43,14 +58,11 @@ static int zfs_ioctl_version = 0;
static __inline int
zcmd_ioctl(int fd, int request, zfs_cmd_t *zc)
{
- size_t oldsize, zfs_kernel_version_size, zfs_ioctl_version_size;
+ size_t oldsize, zfs_kernel_version_size;
int version, ret, cflag = ZFS_CMD_COMPAT_NONE;
- zfs_ioctl_version_size = sizeof(zfs_ioctl_version);
- if (zfs_ioctl_version == 0) {
- sysctlbyname("vfs.zfs.version.ioctl", &zfs_ioctl_version,
- &zfs_ioctl_version_size, NULL, 0);
- }
+ if (zfs_ioctl_version == -1)
+ zfs_ioctl_version = get_zfs_ioctl_version();
if (zfs_ioctl_version == ZFS_IOCVER_DEADMAN)
cflag = ZFS_CMD_COMPAT_DEADMAN;