Use zfs_ioctl with zfs_cmd_t in libzfs

Consistently use the `zfs_ioctl()` wrapper since `ioctl()` cannot be
called directly due to differing semantics between platforms.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Jorgen Lundman <lundman@lundman.net>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #9492
This commit is contained in:
Matthew Macy 2019-10-23 17:29:43 -07:00 committed by Brian Behlendorf
parent 05d07ba9a7
commit b834b58ae6
7 changed files with 27 additions and 27 deletions

View File

@ -133,7 +133,7 @@ namespace_reload(libzfs_handle_t *hdl)
for (;;) { for (;;) {
zc.zc_cookie = hdl->libzfs_ns_gen; zc.zc_cookie = hdl->libzfs_ns_gen;
if (ioctl(hdl->libzfs_fd, ZFS_IOC_POOL_CONFIGS, &zc) != 0) { if (zfs_ioctl(hdl, ZFS_IOC_POOL_CONFIGS, &zc) != 0) {
switch (errno) { switch (errno) {
case EEXIST: case EEXIST:
/* /*
@ -279,7 +279,7 @@ zpool_refresh_stats(zpool_handle_t *zhp, boolean_t *missing)
return (-1); return (-1);
for (;;) { for (;;) {
if (ioctl(zhp->zpool_hdl->libzfs_fd, ZFS_IOC_POOL_STATS, if (zfs_ioctl(zhp->zpool_hdl, ZFS_IOC_POOL_STATS,
&zc) == 0) { &zc) == 0) {
/* /*
* The real error is returned in the zc_cookie field. * The real error is returned in the zc_cookie field.

View File

@ -334,7 +334,7 @@ get_stats_ioctl(zfs_handle_t *zhp, zfs_cmd_t *zc)
(void) strlcpy(zc->zc_name, zhp->zfs_name, sizeof (zc->zc_name)); (void) strlcpy(zc->zc_name, zhp->zfs_name, sizeof (zc->zc_name));
while (ioctl(hdl->libzfs_fd, ZFS_IOC_OBJSET_STATS, zc) != 0) { while (zfs_ioctl(hdl, ZFS_IOC_OBJSET_STATS, zc) != 0) {
if (errno == ENOMEM) { if (errno == ENOMEM) {
if (zcmd_expand_dst_nvlist(hdl, zc) != 0) { if (zcmd_expand_dst_nvlist(hdl, zc) != 0) {
return (-1); return (-1);
@ -362,7 +362,7 @@ get_recvd_props_ioctl(zfs_handle_t *zhp)
(void) strlcpy(zc.zc_name, zhp->zfs_name, sizeof (zc.zc_name)); (void) strlcpy(zc.zc_name, zhp->zfs_name, sizeof (zc.zc_name));
while (ioctl(hdl->libzfs_fd, ZFS_IOC_OBJSET_RECVD_PROPS, &zc) != 0) { while (zfs_ioctl(hdl, ZFS_IOC_OBJSET_RECVD_PROPS, &zc) != 0) {
if (errno == ENOMEM) { if (errno == ENOMEM) {
if (zcmd_expand_dst_nvlist(hdl, &zc) != 0) { if (zcmd_expand_dst_nvlist(hdl, &zc) != 0) {
return (-1); return (-1);
@ -3323,7 +3323,7 @@ zfs_prop_get_userquota_common(zfs_handle_t *zhp, const char *propname,
if (err) if (err)
return (err); return (err);
err = ioctl(zhp->zfs_hdl->libzfs_fd, ZFS_IOC_USERSPACE_ONE, &zc); err = zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_USERSPACE_ONE, &zc);
if (err) if (err)
return (err); return (err);
@ -3404,7 +3404,7 @@ zfs_prop_get_written_int(zfs_handle_t *zhp, const char *propname,
(void) strlcat(zc.zc_value, snapname - 1, sizeof (zc.zc_value)); (void) strlcat(zc.zc_value, snapname - 1, sizeof (zc.zc_value));
} }
err = ioctl(zhp->zfs_hdl->libzfs_fd, ZFS_IOC_SPACE_WRITTEN, &zc); err = zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_SPACE_WRITTEN, &zc);
if (err) if (err)
return (err); return (err);
@ -3541,7 +3541,7 @@ check_parents(libzfs_handle_t *hdl, const char *path, uint64_t *zoned,
slash = parent + strlen(parent); slash = parent + strlen(parent);
(void) strncpy(zc.zc_name, parent, slash - parent); (void) strncpy(zc.zc_name, parent, slash - parent);
zc.zc_name[slash - parent] = '\0'; zc.zc_name[slash - parent] = '\0';
if (ioctl(hdl->libzfs_fd, ZFS_IOC_OBJSET_STATS, &zc) != 0 && if (zfs_ioctl(hdl, ZFS_IOC_OBJSET_STATS, &zc) != 0 &&
errno == ENOENT) { errno == ENOENT) {
zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
"no such pool '%s'"), zc.zc_name); "no such pool '%s'"), zc.zc_name);
@ -5247,7 +5247,7 @@ tryagain:
(void) strlcpy(zc.zc_name, zhp->zfs_name, sizeof (zc.zc_name)); (void) strlcpy(zc.zc_name, zhp->zfs_name, sizeof (zc.zc_name));
if (ioctl(hdl->libzfs_fd, ZFS_IOC_GET_FSACL, &zc) != 0) { if (zfs_ioctl(hdl, ZFS_IOC_GET_FSACL, &zc) != 0) {
(void) snprintf(errbuf, sizeof (errbuf), (void) snprintf(errbuf, sizeof (errbuf),
dgettext(TEXT_DOMAIN, "cannot get permissions on '%s'"), dgettext(TEXT_DOMAIN, "cannot get permissions on '%s'"),
zc.zc_name); zc.zc_name);

View File

@ -70,7 +70,7 @@ get_stats_for_obj(differ_info_t *di, const char *dsname, uint64_t obj,
zc.zc_obj = obj; zc.zc_obj = obj;
errno = 0; errno = 0;
error = ioctl(di->zhp->zfs_hdl->libzfs_fd, ZFS_IOC_OBJ_TO_STATS, &zc); error = zfs_ioctl(di->zhp->zfs_hdl, ZFS_IOC_OBJ_TO_STATS, &zc);
di->zerr = errno; di->zerr = errno;
/* we can get stats even if we failed to get a path */ /* we can get stats even if we failed to get a path */
@ -373,7 +373,7 @@ write_free_diffs(FILE *fp, differ_info_t *di, dmu_diff_record_t *dr)
while (zc.zc_obj < dr->ddr_last) { while (zc.zc_obj < dr->ddr_last) {
int err; int err;
err = ioctl(lhdl->libzfs_fd, ZFS_IOC_NEXT_OBJ, &zc); err = zfs_ioctl(lhdl, ZFS_IOC_NEXT_OBJ, &zc);
if (err == 0) { if (err == 0) {
if (zc.zc_obj == di->shares) { if (zc.zc_obj == di->shares) {
zc.zc_obj++; zc.zc_obj++;
@ -477,7 +477,7 @@ make_temp_snapshot(differ_info_t *di)
(void) strlcpy(zc.zc_name, di->ds, sizeof (zc.zc_name)); (void) strlcpy(zc.zc_name, di->ds, sizeof (zc.zc_name));
zc.zc_cleanup_fd = di->cleanupfd; zc.zc_cleanup_fd = di->cleanupfd;
if (ioctl(hdl->libzfs_fd, ZFS_IOC_TMP_SNAPSHOT, &zc) != 0) { if (zfs_ioctl(hdl, ZFS_IOC_TMP_SNAPSHOT, &zc) != 0) {
int err = errno; int err = errno;
if (err == EPERM) { if (err == EPERM) {
(void) snprintf(di->errbuf, sizeof (di->errbuf), (void) snprintf(di->errbuf, sizeof (di->errbuf),
@ -758,7 +758,7 @@ zfs_show_diffs(zfs_handle_t *zhp, int outfd, const char *fromsnap,
(void) strlcpy(zc.zc_name, di.tosnap, strlen(di.tosnap) + 1); (void) strlcpy(zc.zc_name, di.tosnap, strlen(di.tosnap) + 1);
zc.zc_cookie = pipefd[1]; zc.zc_cookie = pipefd[1];
iocerr = ioctl(zhp->zfs_hdl->libzfs_fd, ZFS_IOC_DIFF, &zc); iocerr = zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_DIFF, &zc);
if (iocerr != 0) { if (iocerr != 0) {
(void) snprintf(errbuf, sizeof (errbuf), (void) snprintf(errbuf, sizeof (errbuf),
dgettext(TEXT_DOMAIN, "Unable to obtain diffs")); dgettext(TEXT_DOMAIN, "Unable to obtain diffs"));

View File

@ -83,7 +83,7 @@ refresh_config(libzfs_handle_t *hdl, nvlist_t *config)
return (NULL); return (NULL);
} }
while ((err = ioctl(hdl->libzfs_fd, ZFS_IOC_POOL_TRYIMPORT, while ((err = zfs_ioctl(hdl, ZFS_IOC_POOL_TRYIMPORT,
&zc)) != 0 && errno == ENOMEM) { &zc)) != 0 && errno == ENOMEM) {
if (zcmd_expand_dst_nvlist(hdl, &zc) != 0) { if (zcmd_expand_dst_nvlist(hdl, &zc) != 0) {
zcmd_free_nvlists(&zc); zcmd_free_nvlists(&zc);

View File

@ -69,7 +69,7 @@ zfs_do_list_ioctl(zfs_handle_t *zhp, int arg, zfs_cmd_t *zc)
orig_cookie = zc->zc_cookie; orig_cookie = zc->zc_cookie;
top: top:
(void) strlcpy(zc->zc_name, zhp->zfs_name, sizeof (zc->zc_name)); (void) strlcpy(zc->zc_name, zhp->zfs_name, sizeof (zc->zc_name));
rc = ioctl(zhp->zfs_hdl->libzfs_fd, arg, zc); rc = zfs_ioctl(zhp->zfs_hdl, arg, zc);
if (rc == -1) { if (rc == -1) {
switch (errno) { switch (errno) {

View File

@ -76,7 +76,7 @@ zpool_get_all_props(zpool_handle_t *zhp)
if (zcmd_alloc_dst_nvlist(hdl, &zc, 0) != 0) if (zcmd_alloc_dst_nvlist(hdl, &zc, 0) != 0)
return (-1); return (-1);
while (ioctl(hdl->libzfs_fd, ZFS_IOC_POOL_GET_PROPS, &zc) != 0) { while (zfs_ioctl(hdl, ZFS_IOC_POOL_GET_PROPS, &zc) != 0) {
if (errno == ENOMEM) { if (errno == ENOMEM) {
if (zcmd_expand_dst_nvlist(hdl, &zc) != 0) { if (zcmd_expand_dst_nvlist(hdl, &zc) != 0) {
zcmd_free_nvlists(&zc); zcmd_free_nvlists(&zc);
@ -3005,7 +3005,7 @@ zpool_vdev_fault(zpool_handle_t *zhp, uint64_t guid, vdev_aux_t aux)
zc.zc_cookie = VDEV_STATE_FAULTED; zc.zc_cookie = VDEV_STATE_FAULTED;
zc.zc_obj = aux; zc.zc_obj = aux;
if (ioctl(hdl->libzfs_fd, ZFS_IOC_VDEV_SET_STATE, &zc) == 0) if (zfs_ioctl(hdl, ZFS_IOC_VDEV_SET_STATE, &zc) == 0)
return (0); return (0);
switch (errno) { switch (errno) {
@ -3040,7 +3040,7 @@ zpool_vdev_degrade(zpool_handle_t *zhp, uint64_t guid, vdev_aux_t aux)
zc.zc_cookie = VDEV_STATE_DEGRADED; zc.zc_cookie = VDEV_STATE_DEGRADED;
zc.zc_obj = aux; zc.zc_obj = aux;
if (ioctl(hdl->libzfs_fd, ZFS_IOC_VDEV_SET_STATE, &zc) == 0) if (zfs_ioctl(hdl, ZFS_IOC_VDEV_SET_STATE, &zc) == 0)
return (0); return (0);
return (zpool_standard_error(hdl, errno, msg)); return (zpool_standard_error(hdl, errno, msg));
@ -3775,7 +3775,7 @@ zpool_vdev_clear(zpool_handle_t *zhp, uint64_t guid)
zc.zc_guid = guid; zc.zc_guid = guid;
zc.zc_cookie = ZPOOL_NO_REWIND; zc.zc_cookie = ZPOOL_NO_REWIND;
if (ioctl(hdl->libzfs_fd, ZFS_IOC_CLEAR, &zc) == 0) if (zfs_ioctl(hdl, ZFS_IOC_CLEAR, &zc) == 0)
return (0); return (0);
return (zpool_standard_error(hdl, errno, msg)); return (zpool_standard_error(hdl, errno, msg));
@ -3986,7 +3986,7 @@ zpool_get_errlog(zpool_handle_t *zhp, nvlist_t **nverrlistp)
zc.zc_nvlist_dst_size = count; zc.zc_nvlist_dst_size = count;
(void) strcpy(zc.zc_name, zhp->zpool_name); (void) strcpy(zc.zc_name, zhp->zpool_name);
for (;;) { for (;;) {
if (ioctl(zhp->zpool_hdl->libzfs_fd, ZFS_IOC_ERROR_LOG, if (zfs_ioctl(zhp->zpool_hdl, ZFS_IOC_ERROR_LOG,
&zc) != 0) { &zc) != 0) {
free((void *)(uintptr_t)zc.zc_nvlist_dst); free((void *)(uintptr_t)zc.zc_nvlist_dst);
if (errno == ENOMEM) { if (errno == ENOMEM) {
@ -4101,7 +4101,7 @@ zpool_log_history(libzfs_handle_t *hdl, const char *message)
fnvlist_add_string(args, "message", message); fnvlist_add_string(args, "message", message);
err = zcmd_write_src_nvlist(hdl, &zc, args); err = zcmd_write_src_nvlist(hdl, &zc, args);
if (err == 0) if (err == 0)
err = ioctl(hdl->libzfs_fd, ZFS_IOC_LOG_HISTORY, &zc); err = zfs_ioctl(hdl, ZFS_IOC_LOG_HISTORY, &zc);
nvlist_free(args); nvlist_free(args);
zcmd_free_nvlists(&zc); zcmd_free_nvlists(&zc);
return (err); return (err);
@ -4128,7 +4128,7 @@ get_history(zpool_handle_t *zhp, char *buf, uint64_t *off, uint64_t *len)
zc.zc_history_len = *len; zc.zc_history_len = *len;
zc.zc_history_offset = *off; zc.zc_history_offset = *off;
if (ioctl(hdl->libzfs_fd, ZFS_IOC_POOL_GET_HISTORY, &zc) != 0) { if (zfs_ioctl(hdl, ZFS_IOC_POOL_GET_HISTORY, &zc) != 0) {
switch (errno) { switch (errno) {
case EPERM: case EPERM:
return (zfs_error_fmt(hdl, EZFS_PERM, return (zfs_error_fmt(hdl, EZFS_PERM,
@ -4360,7 +4360,7 @@ zpool_obj_to_path(zpool_handle_t *zhp, uint64_t dsobj, uint64_t obj,
/* get the dataset's name */ /* get the dataset's name */
(void) strlcpy(zc.zc_name, zhp->zpool_name, sizeof (zc.zc_name)); (void) strlcpy(zc.zc_name, zhp->zpool_name, sizeof (zc.zc_name));
zc.zc_obj = dsobj; zc.zc_obj = dsobj;
if (ioctl(zhp->zpool_hdl->libzfs_fd, if (zfs_ioctl(zhp->zpool_hdl,
ZFS_IOC_DSOBJ_TO_DSNAME, &zc) != 0) { ZFS_IOC_DSOBJ_TO_DSNAME, &zc) != 0) {
/* just write out a path of two object numbers */ /* just write out a path of two object numbers */
(void) snprintf(pathname, len, "<0x%llx>:<0x%llx>", (void) snprintf(pathname, len, "<0x%llx>:<0x%llx>",
@ -4375,7 +4375,7 @@ zpool_obj_to_path(zpool_handle_t *zhp, uint64_t dsobj, uint64_t obj,
/* get the corrupted object's path */ /* get the corrupted object's path */
(void) strlcpy(zc.zc_name, dsname, sizeof (zc.zc_name)); (void) strlcpy(zc.zc_name, dsname, sizeof (zc.zc_name));
zc.zc_obj = obj; zc.zc_obj = obj;
if (ioctl(zhp->zpool_hdl->libzfs_fd, ZFS_IOC_OBJ_TO_PATH, if (zfs_ioctl(zhp->zpool_hdl, ZFS_IOC_OBJ_TO_PATH,
&zc) == 0) { &zc) == 0) {
if (mounted) { if (mounted) {
(void) snprintf(pathname, len, "%s%s", mntpnt, (void) snprintf(pathname, len, "%s%s", mntpnt,

View File

@ -1525,7 +1525,7 @@ dump_filesystem(zfs_handle_t *zhp, void *arg)
(void) snprintf(zc.zc_name, sizeof (zc.zc_name), "%s@%s", (void) snprintf(zc.zc_name, sizeof (zc.zc_name), "%s@%s",
zhp->zfs_name, sdd->tosnap); zhp->zfs_name, sdd->tosnap);
if (ioctl(zhp->zfs_hdl->libzfs_fd, ZFS_IOC_OBJSET_STATS, &zc) != 0) { if (zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_OBJSET_STATS, &zc) != 0) {
(void) fprintf(stderr, dgettext(TEXT_DOMAIN, (void) fprintf(stderr, dgettext(TEXT_DOMAIN,
"WARNING: could not send %s@%s: does not exist\n"), "WARNING: could not send %s@%s: does not exist\n"),
zhp->zfs_name, sdd->tosnap); zhp->zfs_name, sdd->tosnap);
@ -1543,7 +1543,7 @@ dump_filesystem(zfs_handle_t *zhp, void *arg)
*/ */
(void) snprintf(zc.zc_name, sizeof (zc.zc_name), "%s@%s", (void) snprintf(zc.zc_name, sizeof (zc.zc_name), "%s@%s",
zhp->zfs_name, sdd->fromsnap); zhp->zfs_name, sdd->fromsnap);
if (ioctl(zhp->zfs_hdl->libzfs_fd, if (zfs_ioctl(zhp->zfs_hdl,
ZFS_IOC_OBJSET_STATS, &zc) != 0) { ZFS_IOC_OBJSET_STATS, &zc) != 0) {
missingfrom = B_TRUE; missingfrom = B_TRUE;
} }
@ -4667,7 +4667,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap,
err = zfs_error(hdl, EZFS_EXISTS, errbuf); err = zfs_error(hdl, EZFS_EXISTS, errbuf);
goto out; goto out;
} }
if (ioctl(hdl->libzfs_fd, ZFS_IOC_SNAPSHOT_LIST_NEXT, if (zfs_ioctl(hdl, ZFS_IOC_SNAPSHOT_LIST_NEXT,
&zc) == 0) { &zc) == 0) {
zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
"destination has snapshots (eg. %s)\n" "destination has snapshots (eg. %s)\n"
@ -4685,7 +4685,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap,
goto out; goto out;
} }
if (is_volume && if (is_volume &&
ioctl(hdl->libzfs_fd, ZFS_IOC_DATASET_LIST_NEXT, zfs_ioctl(hdl, ZFS_IOC_DATASET_LIST_NEXT,
&zc) == 0) { &zc) == 0) {
zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
"destination has children (eg. %s)\n" "destination has children (eg. %s)\n"