diff options
author | Martin Matuska <mm@FreeBSD.org> | 2013-03-17 22:24:08 +0000 |
---|---|---|
committer | Martin Matuska <mm@FreeBSD.org> | 2013-03-17 22:24:08 +0000 |
commit | d97b41582d8f4603222358f33b73d378388c3778 (patch) | |
tree | 7397a0f6925bc157850a1a7a5db99ce98102bdc1 /cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h | |
parent | af2e40ccd1ca76b646750f248ef7d05f221c9d02 (diff) | |
download | src-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.h | 26 |
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; |