Lines Matching defs:zc
229 * for zc->zc_nvlist_src_size, since we will need to allocate that much memory.
275 static int zfs_ioc_userspace_upgrade(zfs_cmd_t *zc);
276 static int zfs_ioc_id_quota_upgrade(zfs_cmd_t *zc);
293 history_str_get(zfs_cmd_t *zc)
297 if (zc->zc_history == 0)
301 if (copyinstr((void *)(uintptr_t)zc->zc_history,
355 zfs_log_history(zfs_cmd_t *zc)
360 if ((buf = history_str_get(zc)) == NULL)
363 if (spa_open(zc->zc_name, &spa, FTAG) == 0) {
376 zfs_secpolicy_none(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
378 (void) zc, (void) innvl, (void) cr;
387 zfs_secpolicy_read(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
391 zone_dataset_visible(zc->zc_name, NULL))
659 zfs_secpolicy_set_fsacl(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
666 return (zfs_dozonecheck(zc->zc_name, cr));
670 zfs_secpolicy_rollback(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
673 return (zfs_secpolicy_write_perms(zc->zc_name,
678 zfs_secpolicy_send(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
690 cp = strchr(zc->zc_name, '@');
693 error = dsl_pool_hold(zc->zc_name, FTAG, &dp);
697 error = dsl_dataset_hold_obj(dp, zc->zc_sendobj, FTAG, &ds);
703 dsl_dataset_name(ds, zc->zc_name);
705 error = zfs_secpolicy_write_perms_ds(zc->zc_name, ds,
714 zfs_secpolicy_send_new(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
717 return (zfs_secpolicy_write_perms(zc->zc_name,
722 zfs_secpolicy_share(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
724 (void) zc, (void) innvl, (void) cr;
729 zfs_secpolicy_smb_acl(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
731 (void) zc, (void) innvl, (void) cr;
770 zfs_secpolicy_destroy(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
773 return (zfs_secpolicy_destroy_perms(zc->zc_name, cr));
781 zfs_secpolicy_destroy_snaps(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
783 (void) zc;
843 zfs_secpolicy_rename(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
846 return (zfs_secpolicy_rename_perms(zc->zc_name, zc->zc_value, cr));
850 zfs_secpolicy_promote(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
857 error = zfs_secpolicy_write_perms(zc->zc_name,
862 error = dsl_pool_hold(zc->zc_name, FTAG, &dp);
866 error = dsl_dataset_hold(dp, zc->zc_name, FTAG, &clone);
882 error = zfs_secpolicy_write_perms_ds(zc->zc_name, clone,
898 zfs_secpolicy_recv(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
903 if ((error = zfs_secpolicy_write_perms(zc->zc_name,
907 if ((error = zfs_secpolicy_write_perms(zc->zc_name,
911 return (zfs_secpolicy_write_perms(zc->zc_name,
926 zfs_secpolicy_snapshot(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
928 (void) zc;
957 zfs_secpolicy_bookmark(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
959 (void) zc;
982 zfs_secpolicy_destroy_bookmarks(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
984 (void) zc;
1023 zfs_secpolicy_log_history(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1025 (void) zc, (void) innvl, (void) cr;
1036 zfs_secpolicy_create_clone(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1042 if ((error = zfs_get_parent(zc->zc_name, parentname,
1064 zfs_secpolicy_config(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1066 (void) zc, (void) innvl;
1078 zfs_secpolicy_diff(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1086 error = zfs_secpolicy_write_perms(zc->zc_name, ZFS_DELEG_PERM_DIFF, cr);
1094 zfs_secpolicy_inject(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1096 (void) zc, (void) innvl;
1101 zfs_secpolicy_inherit_prop(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1104 zfs_prop_t prop = zfs_name_to_prop(zc->zc_value);
1107 if (!zfs_prop_user(zc->zc_value))
1109 return (zfs_secpolicy_write_perms(zc->zc_name,
1112 return (zfs_secpolicy_setprop(zc->zc_name, prop,
1118 zfs_secpolicy_userspace_one(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1120 int err = zfs_secpolicy_read(zc, innvl, cr);
1124 if (zc->zc_objset_type >= ZFS_NUM_USERQUOTA_PROPS)
1127 if (zc->zc_value[0] == 0) {
1132 if (zc->zc_objset_type == ZFS_PROP_USERUSED ||
1133 zc->zc_objset_type == ZFS_PROP_USERQUOTA ||
1134 zc->zc_objset_type == ZFS_PROP_USEROBJUSED ||
1135 zc->zc_objset_type == ZFS_PROP_USEROBJQUOTA) {
1136 if (zc->zc_guid == crgetuid(cr))
1138 } else if (zc->zc_objset_type == ZFS_PROP_GROUPUSED ||
1139 zc->zc_objset_type == ZFS_PROP_GROUPQUOTA ||
1140 zc->zc_objset_type == ZFS_PROP_GROUPOBJUSED ||
1141 zc->zc_objset_type == ZFS_PROP_GROUPOBJQUOTA) {
1142 if (groupmember(zc->zc_guid, cr))
1148 return (zfs_secpolicy_write_perms(zc->zc_name,
1149 userquota_perms[zc->zc_objset_type], cr));
1153 zfs_secpolicy_userspace_many(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1155 int err = zfs_secpolicy_read(zc, innvl, cr);
1159 if (zc->zc_objset_type >= ZFS_NUM_USERQUOTA_PROPS)
1162 return (zfs_secpolicy_write_perms(zc->zc_name,
1163 userquota_perms[zc->zc_objset_type], cr));
1167 zfs_secpolicy_userspace_upgrade(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1170 return (zfs_secpolicy_setprop(zc->zc_name, ZFS_PROP_VERSION,
1175 zfs_secpolicy_hold(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1177 (void) zc;
1199 zfs_secpolicy_release(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1201 (void) zc;
1223 zfs_secpolicy_tmp_snapshot(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1232 if (zfs_secpolicy_write_perms(zc->zc_name,
1236 error = zfs_secpolicy_snapshot_perms(zc->zc_name, cr);
1240 error = zfs_secpolicy_hold(zc, innvl, cr);
1242 error = zfs_secpolicy_release(zc, innvl, cr);
1244 error = zfs_secpolicy_destroy(zc, innvl, cr);
1250 zfs_secpolicy_load_key(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1252 return (zfs_secpolicy_write_perms(zc->zc_name,
1257 zfs_secpolicy_change_key(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
1259 return (zfs_secpolicy_write_perms(zc->zc_name,
1337 put_nvlist(zfs_cmd_t *zc, nvlist_t *nvl)
1345 if (size > zc->zc_nvlist_dst_size) {
1349 if (ddi_copyout(packed, (void *)(uintptr_t)zc->zc_nvlist_dst,
1350 size, zc->zc_iflags) != 0)
1355 zc->zc_nvlist_dst_size = size;
1356 zc->zc_nvlist_dst_filled = B_TRUE;
1437 zfs_ioc_pool_create(zfs_cmd_t *zc)
1444 const char *spa_name = zc->zc_name;
1447 if ((error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size,
1448 zc->zc_iflags, &config)))
1451 if (zc->zc_nvlist_src_size != 0 && (error =
1452 get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size,
1453 zc->zc_iflags, &props))) {
1497 error = spa_create(zc->zc_name, config, props, zplprops, dcp);
1519 zfs_ioc_pool_destroy(zfs_cmd_t *zc)
1522 zfs_log_history(zc);
1523 error = spa_destroy(zc->zc_name);
1529 zfs_ioc_pool_import(zfs_cmd_t *zc)
1535 if ((error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size,
1536 zc->zc_iflags, &config)) != 0)
1539 if (zc->zc_nvlist_src_size != 0 && (error =
1540 get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size,
1541 zc->zc_iflags, &props))) {
1547 guid != zc->zc_guid)
1550 error = spa_import(zc->zc_name, config, props, zc->zc_cookie);
1552 if (zc->zc_nvlist_dst != 0) {
1555 if ((err = put_nvlist(zc, config)) != 0)
1566 zfs_ioc_pool_export(zfs_cmd_t *zc)
1569 boolean_t force = (boolean_t)zc->zc_cookie;
1570 boolean_t hardforce = (boolean_t)zc->zc_guid;
1572 zfs_log_history(zc);
1573 error = spa_export(zc->zc_name, NULL, force, hardforce);
1579 zfs_ioc_pool_configs(zfs_cmd_t *zc)
1584 error = spa_all_configs(&zc->zc_cookie, &configs);
1588 error = put_nvlist(zc, configs);
1605 zfs_ioc_pool_stats(zfs_cmd_t *zc)
1611 error = spa_get_stats(zc->zc_name, &config, zc->zc_value,
1612 sizeof (zc->zc_value));
1615 ret = put_nvlist(zc, config);
1623 zc->zc_cookie = error;
1636 zfs_ioc_pool_tryimport(zfs_cmd_t *zc)
1641 if ((error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size,
1642 zc->zc_iflags, &tryconfig)) != 0)
1652 error = put_nvlist(zc, config);
1665 zfs_ioc_pool_scan(zfs_cmd_t *zc)
1670 if (zc->zc_flags >= POOL_SCRUB_FLAGS_END)
1673 if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0)
1676 if (zc->zc_flags == POOL_SCRUB_PAUSE)
1678 else if (zc->zc_cookie == POOL_SCAN_NONE)
1681 error = spa_scan(spa, zc->zc_cookie);
1733 zfs_ioc_pool_freeze(zfs_cmd_t *zc)
1738 error = spa_open(zc->zc_name, &spa, FTAG);
1747 zfs_ioc_pool_upgrade(zfs_cmd_t *zc)
1752 if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0)
1755 if (zc->zc_cookie < spa_version(spa) ||
1756 !SPA_VERSION_IS_SUPPORTED(zc->zc_cookie)) {
1761 spa_upgrade(spa, zc->zc_cookie);
1768 zfs_ioc_pool_get_history(zfs_cmd_t *zc)
1775 if ((size = zc->zc_history_len) == 0)
1778 if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0)
1787 if ((error = spa_history_get(spa, &zc->zc_history_offset,
1788 &zc->zc_history_len, hist_buf)) == 0) {
1790 (void *)(uintptr_t)zc->zc_history,
1791 zc->zc_history_len, zc->zc_iflags);
1805 zfs_ioc_pool_reguid(zfs_cmd_t *zc)
1813 if (zc->zc_nvlist_src_size != 0) {
1814 error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size,
1815 zc->zc_iflags, &props);
1828 error = spa_open(zc->zc_name, &spa, FTAG);
1842 zfs_ioc_dsobj_to_dsname(zfs_cmd_t *zc)
1844 return (dsl_dsobj_to_dsname(zc->zc_name, zc->zc_obj, zc->zc_value));
1856 zfs_ioc_obj_to_path(zfs_cmd_t *zc)
1862 if ((error = dmu_objset_hold_flags(zc->zc_name, B_TRUE,
1869 error = zfs_obj_to_path(os, zc->zc_obj, zc->zc_value,
1870 sizeof (zc->zc_value));
1886 zfs_ioc_obj_to_stats(zfs_cmd_t *zc)
1892 if ((error = dmu_objset_hold_flags(zc->zc_name, B_TRUE,
1899 error = zfs_obj_to_stats(os, zc->zc_obj, &zc->zc_stat, zc->zc_value,
1900 sizeof (zc->zc_value));
1907 zfs_ioc_vdev_add(zfs_cmd_t *zc)
1913 error = spa_open(zc->zc_name, &spa, FTAG);
1917 error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size,
1918 zc->zc_iflags, &config);
1920 error = spa_vdev_add(spa, config, zc->zc_flags);
1934 zfs_ioc_vdev_remove(zfs_cmd_t *zc)
1939 error = spa_open(zc->zc_name, &spa, FTAG);
1942 if (zc->zc_cookie != 0) {
1945 error = spa_vdev_remove(spa, zc->zc_guid, B_FALSE);
1952 zfs_ioc_vdev_set_state(zfs_cmd_t *zc)
1958 if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0)
1960 switch (zc->zc_cookie) {
1962 error = vdev_online(spa, zc->zc_guid, zc->zc_obj, &newstate);
1966 error = vdev_offline(spa, zc->zc_guid, zc->zc_obj);
1970 if (zc->zc_obj != VDEV_AUX_ERR_EXCEEDED &&
1971 zc->zc_obj != VDEV_AUX_EXTERNAL &&
1972 zc->zc_obj != VDEV_AUX_EXTERNAL_PERSIST)
1973 zc->zc_obj = VDEV_AUX_ERR_EXCEEDED;
1975 error = vdev_fault(spa, zc->zc_guid, zc->zc_obj);
1979 if (zc->zc_obj != VDEV_AUX_ERR_EXCEEDED &&
1980 zc->zc_obj != VDEV_AUX_EXTERNAL)
1981 zc->zc_obj = VDEV_AUX_ERR_EXCEEDED;
1983 error = vdev_degrade(spa, zc->zc_guid, zc->zc_obj);
1987 error = vdev_remove_wanted(spa, zc->zc_guid);
1993 zc->zc_cookie = newstate;
1999 zfs_ioc_vdev_attach(zfs_cmd_t *zc)
2003 int replacing = zc->zc_cookie;
2004 int rebuild = zc->zc_simple;
2007 if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0)
2010 if ((error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size,
2011 zc->zc_iflags, &config)) == 0) {
2012 error = spa_vdev_attach(spa, zc->zc_guid, config, replacing,
2022 zfs_ioc_vdev_detach(zfs_cmd_t *zc)
2027 if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0)
2030 error = spa_vdev_detach(spa, zc->zc_guid, 0, B_FALSE);
2037 zfs_ioc_vdev_split(zfs_cmd_t *zc)
2042 boolean_t exp = !!(zc->zc_cookie & ZPOOL_EXPORT_AFTER_SPLIT);
2044 if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0)
2047 if ((error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size,
2048 zc->zc_iflags, &config))) {
2053 if (zc->zc_nvlist_src_size != 0 && (error =
2054 get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size,
2055 zc->zc_iflags, &props))) {
2061 error = spa_vdev_split_mirror(spa, zc->zc_string, config, props, exp);
2072 zfs_ioc_vdev_setpath(zfs_cmd_t *zc)
2075 const char *path = zc->zc_value;
2076 uint64_t guid = zc->zc_guid;
2079 error = spa_open(zc->zc_name, &spa, FTAG);
2089 zfs_ioc_vdev_setfru(zfs_cmd_t *zc)
2092 const char *fru = zc->zc_value;
2093 uint64_t guid = zc->zc_guid;
2096 error = spa_open(zc->zc_name, &spa, FTAG);
2106 zfs_ioc_objset_stats_impl(zfs_cmd_t *zc, objset_t *os)
2111 dmu_objset_fast_stat(os, &zc->zc_objset_stats);
2113 if (!zc->zc_simple && zc->zc_nvlist_dst != 0 &&
2123 if (!zc->zc_objset_stats.dds_inconsistent &&
2133 error = put_nvlist(zc, nv);
2151 zfs_ioc_objset_stats(zfs_cmd_t *zc)
2156 error = dmu_objset_hold(zc->zc_name, FTAG, &os);
2158 error = zfs_ioc_objset_stats_impl(zc, os);
2179 zfs_ioc_objset_recvd_props(zfs_cmd_t *zc)
2189 if (!dsl_prop_get_hasrecvd(zc->zc_name))
2192 if (zc->zc_nvlist_dst != 0 &&
2193 (error = dsl_prop_get_received(zc->zc_name, &nv)) == 0) {
2194 error = put_nvlist(zc, nv);
2227 zfs_ioc_objset_zplprops(zfs_cmd_t *zc)
2233 if ((err = dmu_objset_hold(zc->zc_name, FTAG, &os)))
2236 dmu_objset_fast_stat(os, &zc->zc_objset_stats);
2243 if (zc->zc_nvlist_dst != 0 &&
2244 !zc->zc_objset_stats.dds_inconsistent &&
2253 err = put_nvlist(zc, nv);
2276 zfs_ioc_dataset_list_next(zfs_cmd_t *zc)
2281 size_t orig_len = strlen(zc->zc_name);
2284 if ((error = dmu_objset_hold(zc->zc_name, FTAG, &os))) {
2290 p = strrchr(zc->zc_name, '/');
2292 (void) strlcat(zc->zc_name, "/", sizeof (zc->zc_name));
2293 p = zc->zc_name + strlen(zc->zc_name);
2297 sizeof (zc->zc_name) - (p - zc->zc_name), p,
2298 NULL, &zc->zc_cookie);
2301 } while (error == 0 && zfs_dataset_name_hidden(zc->zc_name));
2308 if (error == 0 && strchr(zc->zc_name, '$') == NULL) {
2309 error = zfs_ioc_objset_stats(zc); /* fill in the stats */
2312 zc->zc_name[orig_len] = '\0';
2333 zfs_ioc_snapshot_list_next(zfs_cmd_t *zc)
2340 if (zc->zc_nvlist_src_size != 0) {
2342 error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size,
2343 zc->zc_iflags, &props);
2353 error = dmu_objset_hold(zc->zc_name, FTAG, &os);
2362 if (strlcat(zc->zc_name, "@", sizeof (zc->zc_name)) >=
2375 sizeof (zc->zc_name) - strlen(zc->zc_name),
2376 zc->zc_name + strlen(zc->zc_name), &zc->zc_obj,
2377 &zc->zc_cookie, NULL);
2385 error = dsl_dataset_hold_obj(dmu_objset_pool(os), zc->zc_obj,
2394 *(strchr(zc->zc_name, '@') + 1) = '\0';
2399 if (zc->zc_simple) {
2400 dsl_dataset_fast_stat(ds, &zc->zc_objset_stats);
2409 if ((error = zfs_ioc_objset_stats_impl(zc, ossnap)) != 0) {
2420 *strchr(zc->zc_name, '@') = '\0';
2589 zfs_cmd_t *zc;
2591 zc = kmem_zalloc(sizeof (zfs_cmd_t), KM_SLEEP);
2592 (void) strlcpy(zc->zc_name, dsname,
2593 sizeof (zc->zc_name));
2594 (void) zfs_ioc_userspace_upgrade(zc);
2595 (void) zfs_ioc_id_quota_upgrade(zc);
2596 kmem_free(zc, sizeof (zfs_cmd_t));
2916 zfs_ioc_set_prop(zfs_cmd_t *zc)
2919 boolean_t received = zc->zc_cookie;
2925 if ((error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size,
2926 zc->zc_iflags, &nvl)) != 0)
2932 if (dsl_prop_get_received(zc->zc_name, &origprops) == 0) {
2933 (void) clear_received_props(zc->zc_name,
2938 error = dsl_prop_set_hasrecvd(zc->zc_name);
2943 error = zfs_set_prop_nvlist(zc->zc_name, source, nvl, errors);
2945 if (zc->zc_nvlist_dst != 0 && errors != NULL) {
2946 (void) put_nvlist(zc, errors);
2963 zfs_ioc_inherit_prop(zfs_cmd_t *zc)
2965 const char *propname = zc->zc_value;
2967 boolean_t received = zc->zc_cookie;
3021 err = zfs_prop_set_special(zc->zc_name, source, pair);
3023 err = dsl_prop_inherit(zc->zc_name, zc->zc_value,
3033 zfs_ioc_pool_set_props(zfs_cmd_t *zc)
3040 if ((error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size,
3041 zc->zc_iflags, &props)))
3053 if ((spa = spa_lookup(zc->zc_name)) != NULL) {
3064 if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0) {
3224 zfs_ioc_set_fsacl(zfs_cmd_t *zc)
3229 if ((error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size,
3230 zc->zc_iflags, &fsaclnv)) != 0)
3249 if (zc->zc_perm_action == B_FALSE) {
3250 error = dsl_deleg_can_allow(zc->zc_name,
3253 error = dsl_deleg_can_unallow(zc->zc_name,
3259 error = dsl_deleg_set(zc->zc_name, fsaclnv, zc->zc_perm_action);
3273 zfs_ioc_get_fsacl(zfs_cmd_t *zc)
3278 if ((error = dsl_deleg_get(zc->zc_name, &nvp)) == 0) {
3279 error = put_nvlist(zc, nvp);
4170 zfs_ioc_destroy(zfs_cmd_t *zc)
4176 err = dmu_objset_hold(zc->zc_name, FTAG, &os);
4183 zfs_unmount_snap(zc->zc_name);
4185 if (strchr(zc->zc_name, '@')) {
4186 err = dsl_destroy_snapshot(zc->zc_name, zc->zc_defer_destroy);
4188 err = dsl_destroy_head(zc->zc_name);
4201 zc->zc_name, recv_clone_name) >=
4213 err = dsl_destroy_head(zc->zc_name);
4668 zfs_ioc_rename(zfs_cmd_t *zc)
4672 boolean_t recursive = zc->zc_cookie & 1;
4673 boolean_t nounmount = !!(zc->zc_cookie & 2);
4678 zc->zc_name[sizeof (zc->zc_name) - 1] = '\0';
4679 zc->zc_value[sizeof (zc->zc_value) - 1] = '\0';
4680 if (dataset_namecheck(zc->zc_name, NULL, NULL) != 0 ||
4681 dataset_namecheck(zc->zc_value, NULL, NULL) != 0 ||
4682 strchr(zc->zc_name, '%') || strchr(zc->zc_value, '%'))
4685 err = dmu_objset_hold(zc->zc_name, FTAG, &os);
4691 at = strchr(zc->zc_name, '@');
4696 if (strncmp(zc->zc_name, zc->zc_value, at - zc->zc_name + 1))
4700 error = dmu_objset_find(zc->zc_name,
4708 error = dsl_dataset_rename_snapshot(zc->zc_name,
4709 at + 1, strchr(zc->zc_value, '@') + 1, recursive);
4714 return (dsl_dir_rename(zc->zc_name, zc->zc_value));
4978 zfs_cmd_t *zc;
4988 zc = kmem_alloc(sizeof (zfs_cmd_t), KM_SLEEP);
4989 (void) strlcpy(zc->zc_name, dataset, sizeof (zc->zc_name));
4994 (void) strlcpy(zc->zc_value, nvpair_name(pair),
4995 sizeof (zc->zc_value));
4997 (err = zfs_secpolicy_inherit_prop(zc, NULL, CRED())) != 0) {
5000 zc->zc_value, err) == 0);
5004 kmem_free(zc, sizeof (zfs_cmd_t));
5509 zfs_ioc_recv(zfs_cmd_t *zc)
5520 if (dataset_namecheck(zc->zc_value, NULL, NULL) != 0 ||
5521 strchr(zc->zc_value, '@') == NULL ||
5522 strchr(zc->zc_value, '%') != NULL) {
5526 (void) strlcpy(tofs, zc->zc_value, sizeof (tofs));
5530 if (zc->zc_nvlist_src != 0 &&
5531 (error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size,
5532 zc->zc_iflags, &recvdprops)) != 0) {
5536 if (zc->zc_nvlist_conf != 0 &&
5537 (error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size,
5538 zc->zc_iflags, &localprops)) != 0) {
5542 if (zc->zc_string[0])
5543 origin = zc->zc_string;
5547 begin_record.drr_u.drr_begin = zc->zc_begin_record;
5550 NULL, zc->zc_guid, B_FALSE, B_FALSE, zc->zc_cookie, &begin_record,
5551 &zc->zc_cookie, &zc->zc_obj, &errors);
5557 if (zc->zc_nvlist_dst_size != 0 && errors != NULL &&
5558 (nvlist_smush(errors, zc->zc_nvlist_dst_size) != 0 ||
5559 put_nvlist(zc, errors) != 0)) {
5561 * Caller made zc->zc_nvlist_dst less than the minimum expected
5795 zfs_ioc_send(zfs_cmd_t *zc)
5799 boolean_t estimate = (zc->zc_guid != 0);
5800 boolean_t embedok = (zc->zc_flags & 0x1);
5801 boolean_t large_block_ok = (zc->zc_flags & 0x2);
5802 boolean_t compressok = (zc->zc_flags & 0x4);
5803 boolean_t rawok = (zc->zc_flags & 0x8);
5804 boolean_t savedok = (zc->zc_flags & 0x10);
5806 if (zc->zc_obj != 0) {
5810 error = dsl_pool_hold(zc->zc_name, FTAG, &dp);
5814 error = dsl_dataset_hold_obj(dp, zc->zc_sendobj, FTAG, &tosnap);
5821 zc->zc_fromobj =
5832 error = dsl_pool_hold(zc->zc_name, FTAG, &dp);
5836 error = dsl_dataset_hold_obj(dp, zc->zc_sendobj,
5843 if (zc->zc_fromobj != 0) {
5844 error = dsl_dataset_hold_obj(dp, zc->zc_fromobj,
5854 compressok || rawok, savedok, &zc->zc_objset_type);
5863 error = dump_bytes_init(&dba, zc->zc_cookie, &out);
5868 error = dmu_send_obj(zc->zc_name, zc->zc_sendobj,
5869 zc->zc_fromobj, embedok, large_block_ok, compressok,
5870 rawok, savedok, zc->zc_cookie, &off, &out);
5887 zfs_ioc_send_progress(zfs_cmd_t *zc)
5894 error = dsl_pool_hold(zc->zc_name, FTAG, &dp);
5898 error = dsl_dataset_hold(dp, zc->zc_name, FTAG, &ds);
5915 if (dsp->dss_outfd == zc->zc_cookie &&
5921 zc->zc_cookie = atomic_cas_64((volatile uint64_t *)dsp->dss_off,
5924 zc->zc_objset_type = atomic_cas_64(&dsp->dss_blocks, 0, 0);
5936 zfs_ioc_inject_fault(zfs_cmd_t *zc)
5940 error = zio_inject_fault(zc->zc_name, (int)zc->zc_guid, &id,
5941 &zc->zc_inject_record);
5944 zc->zc_guid = (uint64_t)id;
5950 zfs_ioc_clear_fault(zfs_cmd_t *zc)
5952 return (zio_clear_fault((int)zc->zc_guid));
5956 zfs_ioc_inject_list_next(zfs_cmd_t *zc)
5958 int id = (int)zc->zc_guid;
5961 error = zio_inject_list_next(&id, zc->zc_name, sizeof (zc->zc_name),
5962 &zc->zc_inject_record);
5964 zc->zc_guid = id;
5970 zfs_ioc_error_log(zfs_cmd_t *zc)
5975 if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0)
5978 error = spa_get_errlog(spa, (void *)(uintptr_t)zc->zc_nvlist_dst,
5979 &zc->zc_nvlist_dst_size);
5987 zfs_ioc_clear(zfs_cmd_t *zc)
5997 spa = spa_lookup(zc->zc_name);
6009 if (zc->zc_cookie & ZPOOL_NO_REWIND) {
6010 error = spa_open(zc->zc_name, &spa, FTAG);
6015 if (zc->zc_nvlist_src == 0)
6018 if ((error = get_nvlist(zc->zc_nvlist_src,
6019 zc->zc_nvlist_src_size, zc->zc_iflags, &policy)) == 0) {
6020 error = spa_open_rewind(zc->zc_name, &spa, FTAG,
6025 if ((err = put_nvlist(zc, config)) != 0)
6048 if (zc->zc_guid == 0) {
6051 vd = spa_lookup_by_guid(spa, zc->zc_guid, B_TRUE);
6136 zfs_ioc_promote(zfs_cmd_t *zc)
6144 zc->zc_name[sizeof (zc->zc_name) - 1] = '\0';
6145 if (dataset_namecheck(zc->zc_name, NULL, NULL) != 0 ||
6146 strchr(zc->zc_name, '%'))
6149 error = dsl_pool_hold(zc->zc_name, FTAG, &dp);
6153 error = dsl_dataset_hold(dp, zc->zc_name, FTAG, &ds);
6187 return (dsl_dataset_promote(zc->zc_name, zc->zc_string));
6203 zfs_ioc_userspace_one(zfs_cmd_t *zc)
6208 if (zc->zc_objset_type >= ZFS_NUM_USERQUOTA_PROPS)
6211 error = zfsvfs_hold(zc->zc_name, FTAG, &zfsvfs, B_FALSE);
6216 zc->zc_objset_type, zc->zc_value, zc->zc_guid, &zc->zc_cookie);
6234 zfs_ioc_userspace_many(zfs_cmd_t *zc)
6237 int bufsize = zc->zc_nvlist_dst_size;
6242 int error = zfsvfs_hold(zc->zc_name, FTAG, &zfsvfs, B_FALSE);
6248 error = zfs_userspace_many(zfsvfs, zc->zc_objset_type, &zc->zc_cookie,
6249 buf, &zc->zc_nvlist_dst_size);
6253 (void *)(uintptr_t)zc->zc_nvlist_dst,
6254 zc->zc_nvlist_dst_size);
6270 zfs_ioc_userspace_upgrade(zfs_cmd_t *zc)
6275 if (getzfsvfs(zc->zc_name, &zfsvfs) == 0) {
6317 error = dmu_objset_hold_flags(zc->zc_name, B_TRUE, FTAG, &os);
6351 zfs_ioc_id_quota_upgrade(zfs_cmd_t *zc)
6356 error = dmu_objset_hold_flags(zc->zc_name, B_TRUE, FTAG, &os);
6387 zfs_ioc_share(zfs_cmd_t *zc)
6401 zfs_ioc_next_obj(zfs_cmd_t *zc)
6406 error = dmu_objset_hold(zc->zc_name, FTAG, &os);
6410 error = dmu_object_next(os, &zc->zc_obj, B_FALSE, 0);
6426 zfs_ioc_tmp_snapshot(zfs_cmd_t *zc)
6432 zfs_file_t *fp = zfs_onexit_fd_hold(zc->zc_cleanup_fd, &minor);
6436 snap_name = kmem_asprintf("%s-%016llx", zc->zc_value,
6438 hold_name = kmem_asprintf("%%%s", zc->zc_value);
6440 int error = dsl_dataset_snapshot_tmp(zc->zc_name, snap_name, minor,
6443 (void) strlcpy(zc->zc_value, snap_name,
6444 sizeof (zc->zc_value));
6461 zfs_ioc_diff(zfs_cmd_t *zc)
6467 if ((fp = zfs_file_get(zc->zc_cookie)) == NULL)
6471 error = dmu_diff(zc->zc_name, zc->zc_value, fp, &off);
6479 zfs_ioc_smb_acl(zfs_cmd_t *zc)
6591 zfs_ioc_events_next(zfs_cmd_t *zc)
6599 zfs_file_t *fp = zfs_zevent_fd_hold(zc->zc_cleanup_fd, &minor, &ze);
6605 &zc->zc_nvlist_dst_size, &dropped);
6607 zc->zc_cookie = dropped;
6608 error = put_nvlist(zc, event);
6612 if (zc->zc_guid & ZEVENT_NONBLOCK)
6633 zfs_ioc_events_clear(zfs_cmd_t *zc)
6638 zc->zc_cookie = count;
6649 zfs_ioc_events_seek(zfs_cmd_t *zc)
6655 zfs_file_t *fp = zfs_zevent_fd_hold(zc->zc_cleanup_fd, &minor, &ze);
6659 error = zfs_zevent_seek(ze, zc->zc_guid);
6676 zfs_ioc_space_written(zfs_cmd_t *zc)
6682 error = dsl_pool_hold(zc->zc_name, FTAG, &dp);
6685 error = dsl_dataset_hold(dp, zc->zc_name, FTAG, &new);
6690 if (strchr(zc->zc_value, '#') != NULL) {
6692 error = dsl_bookmark_lookup(dp, zc->zc_value,
6696 &zc->zc_cookie,
6697 &zc->zc_objset_type, &zc->zc_perm_action);
6701 error = dsl_dataset_hold(dp, zc->zc_value, FTAG, &old);
6705 &zc->zc_cookie,
6706 &zc->zc_objset_type, &zc->zc_perm_action);
7907 zfsdev_ioctl_common(uint_t vecnum, zfs_cmd_t *zc, int flag)
7932 zc->zc_iflags = flag & FKIOCTL;
7934 if (zc->zc_nvlist_src_size > max_nvlist_src_size) {
7950 } else if (zc->zc_nvlist_src_size != 0) {
7951 error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size,
7952 zc->zc_iflags, &innvl);
7961 zc->zc_name[sizeof (zc->zc_name) - 1] = '\0';
7964 if (pool_namecheck(zc->zc_name, NULL, NULL) != 0)
7967 error = pool_status_check(zc->zc_name,
7972 if (dataset_namecheck(zc->zc_name, NULL, NULL) != 0)
7975 error = pool_status_check(zc->zc_name,
7980 if (entity_namecheck(zc->zc_name, NULL, NULL) != 0) {
7983 error = pool_status_check(zc->zc_name,
8007 error = vec->zvec_secpolicy(zc, innvl, CRED());
8019 saved_poolname_len = strlen(zc->zc_name) + 1;
8022 strlcpy(saved_poolname, zc->zc_name, saved_poolname_len);
8049 error = vec->zvec_func(zc->zc_name, innvl, outnvl);
8060 spa_open(zc->zc_name, &spa, FTAG) == 0) {
8082 if (!nvlist_empty(outnvl) || zc->zc_nvlist_dst_size != 0) {
8086 zc->zc_nvlist_dst_size);
8089 puterror = put_nvlist(zc, outnvl);
8098 error = vec->zvec_legacy_func(zc);