[PATCH] Consistently use zfs_ioctl()

Xin LI delphij at delphij.net
Mon Jul 25 20:26:37 UTC 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hi,

Here is a patch that makes libzfs use zfs_ioctl consistently.  Some
functionality in libzfs calls ioctl() directly with raw ZFS ioctls,
which causes some kernel message like:

WARNING pid 30031 (initial thread): ioctl sign-extension ioctl
ffffffffd5985a3a

Objections?  I have kept #sun'ed out blocks out.

Cheers,
- -- 
Xin LI <delphij at delphij.net>	https://www.delphij.net/
FreeBSD - The Power to Serve!		Live free or die
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.17 (FreeBSD)

iQEcBAEBCAAGBQJOLdF8AAoJEATO+BI/yjfBI0AH/04tS03WW0vIW/ywXp/FsHV6
bkkZQw7rjN2dnenHBTg3DNcjYlXpZOgRb/mnuwMsTxm/Xf/RVekfCLGoljwv7NNK
FUTozx7jVBvwAhjArvUTsVjpblnm2b+mS9TCWh9BWVhIr5N6sMALZxZkNvVTUVn+
ZXotIaqQPSVNdEC3BuvJsxyHAEutTPF8TvMojKhaRhxTPGGcrjQfVLHHR/YMLhY5
ED/7gJsvSTAi+gmtHWgF9q5oqN9sCE/Juy5XD0HcXok5dZ2cfjYYFacKbbjpXQhn
eYj8zSVPna0avCJ0YEivEO5LCEF9MLgTMGFJtV38mRandNdbU5UFNqA+m4WJeiM=
=zWDs
-----END PGP SIGNATURE-----
-------------- next part --------------
Index: cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
===================================================================
--- cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c	(revision 224337)
+++ cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c	(working copy)
@@ -2382,6 +2382,7 @@ zfs_prop_get_userquota_common(zfs_handle_t *zhp, c
 {
 	int err;
 	zfs_cmd_t zc = { 0 };
+	libzfs_handle_t *hdl = zhp->zfs_hdl;
 
 	(void) strncpy(zc.zc_name, zhp->zfs_name, sizeof (zc.zc_name));
 
@@ -2392,7 +2393,7 @@ zfs_prop_get_userquota_common(zfs_handle_t *zhp, c
 	if (err)
 		return (err);
 
-	err = ioctl(zhp->zfs_hdl->libzfs_fd, ZFS_IOC_USERSPACE_ONE, &zc);
+	err = zfs_ioctl(hdl, ZFS_IOC_USERSPACE_ONE, &zc);
 	if (err)
 		return (err);
 
@@ -2458,11 +2459,12 @@ zfs_do_list_ioctl(zfs_handle_t *zhp, unsigned long
 {
 	int rc;
 	uint64_t	orig_cookie;
+	libzfs_handle_t *hdl = zhp->zfs_hdl;
 
 	orig_cookie = zc->zc_cookie;
 top:
 	(void) strlcpy(zc->zc_name, zhp->zfs_name, sizeof (zc->zc_name));
-	rc = ioctl(zhp->zfs_hdl->libzfs_fd, arg, zc);
+	rc = zfs_ioctl(hdl, arg, zc);
 
 	if (rc == -1) {
 		switch (errno) {
@@ -3800,7 +3802,7 @@ zfs_deleg_share_nfs(libzfs_handle_t *hdl, char *da
 	zc.zc_share.z_exportdata = (uint64_t)(uintptr_t)export;
 	zc.zc_share.z_sharetype = operation;
 	zc.zc_share.z_sharemax = sharemax;
-	error = ioctl(hdl->libzfs_fd, ZFS_IOC_SHARE, &zc);
+	error = zfs_ioctl(hdl, ZFS_IOC_SHARE, &zc);
 	return (error);
 }
 
@@ -3924,6 +3926,7 @@ zfs_userspace(zfs_handle_t *zhp, zfs_userquota_pro
     zfs_userspace_cb_t func, void *arg)
 {
 	zfs_cmd_t zc = { 0 };
+	libzfs_handle_t *hdl = zhp->zfs_hdl;
 	int error;
 	zfs_useracct_t buf[100];
 
@@ -3937,7 +3940,7 @@ zfs_userspace(zfs_handle_t *zhp, zfs_userquota_pro
 		zfs_useracct_t *zua = buf;
 
 		zc.zc_nvlist_dst_size = sizeof (buf);
-		error = ioctl(zhp->zfs_hdl->libzfs_fd,
+		error = zfs_ioctl(hdl,
 		    ZFS_IOC_USERSPACE_MANY, &zc);
 		if (error || zc.zc_nvlist_dst_size == 0)
 			break;
@@ -4316,7 +4319,7 @@ zfs_jail(zfs_handle_t *zhp, int jailid, int attach
 	zc.zc_jailid = jailid;
 
 	cmd = attach ? ZFS_IOC_JAIL : ZFS_IOC_UNJAIL;
-	if ((ret = ioctl(hdl->libzfs_fd, cmd, &zc)) != 0)
+	if ((ret = zfs_ioctl(hdl, cmd, &zc)) != 0)
 		zfs_standard_error(hdl, errno, errbuf);
 
 	return (ret);


More information about the zfs-devel mailing list