1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2014 Xin Li <delphij@FreeBSD.org>. All rights reserved. 23 * Copyright 2013 Martin Matuska <mm@FreeBSD.org>. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _SYS_ZFS_IOCTL_COMPAT_H 28 #define _SYS_ZFS_IOCTL_COMPAT_H 29 30 #include <sys/cred.h> 31 #include <sys/sunddi.h> 32 #include <sys/dmu.h> 33 #include <sys/zio.h> 34 #include <sys/dsl_deleg.h> 35 #include <sys/zfs_ioctl.h> 36 37 #ifdef _KERNEL 38 #include <sys/nvpair.h> 39 #endif /* _KERNEL */ 40 41 #ifdef __cplusplus 42 extern "C" { 43 #endif 44 45 /* 46 * Backwards ioctl compatibility 47 */ 48 49 /* ioctl versions for vfs.zfs.version.ioctl */ 50 #define ZFS_IOCVER_UNDEF -1 51 #define ZFS_IOCVER_NONE 0 52 #define ZFS_IOCVER_DEADMAN 1 53 #define ZFS_IOCVER_LZC 2 54 #define ZFS_IOCVER_ZCMD 3 55 #define ZFS_IOCVER_EDBP 4 56 #define ZFS_IOCVER_RESUME 5 57 #define ZFS_IOCVER_INLANES 6 58 #define ZFS_IOCVER_PAD 7 59 #define ZFS_IOCVER_CURRENT ZFS_IOCVER_PAD 60 61 /* compatibility conversion flag */ 62 #define ZFS_CMD_COMPAT_NONE 0 63 #define ZFS_CMD_COMPAT_V15 1 64 #define ZFS_CMD_COMPAT_V28 2 65 #define ZFS_CMD_COMPAT_DEADMAN 3 66 #define ZFS_CMD_COMPAT_LZC 4 67 #define ZFS_CMD_COMPAT_ZCMD 5 68 #define ZFS_CMD_COMPAT_EDBP 6 69 #define ZFS_CMD_COMPAT_RESUME 7 70 #define ZFS_CMD_COMPAT_INLANES 8 71 72 #define ZFS_IOC_COMPAT_PASS 254 73 #define ZFS_IOC_COMPAT_FAIL 255 74 75 #define ZFS_IOCREQ(ioreq) ((ioreq) & 0xff) 76 77 typedef struct zfs_iocparm { 78 uint32_t zfs_ioctl_version; 79 uint64_t zfs_cmd; 80 uint64_t zfs_cmd_size; 81 } zfs_iocparm_t; 82 83 typedef struct zinject_record_v15 { 84 uint64_t zi_objset; 85 uint64_t zi_object; 86 uint64_t zi_start; 87 uint64_t zi_end; 88 uint64_t zi_guid; 89 uint32_t zi_level; 90 uint32_t zi_error; 91 uint64_t zi_type; 92 uint32_t zi_freq; 93 uint32_t zi_failfast; 94 } zinject_record_v15_t; 95 96 typedef struct zfs_cmd_v15 { 97 char zc_name[MAXPATHLEN]; 98 char zc_value[MAXPATHLEN]; 99 char zc_string[MAXNAMELEN]; 100 uint64_t zc_guid; 101 uint64_t zc_nvlist_conf; /* really (char *) */ 102 uint64_t zc_nvlist_conf_size; 103 uint64_t zc_nvlist_src; /* really (char *) */ 104 uint64_t zc_nvlist_src_size; 105 uint64_t zc_nvlist_dst; /* really (char *) */ 106 uint64_t zc_nvlist_dst_size; 107 uint64_t zc_cookie; 108 uint64_t zc_objset_type; 109 uint64_t zc_perm_action; 110 uint64_t zc_history; /* really (char *) */ 111 uint64_t zc_history_len; 112 uint64_t zc_history_offset; 113 uint64_t zc_obj; 114 zfs_share_t zc_share; 115 uint64_t zc_jailid; 116 dmu_objset_stats_t zc_objset_stats; 117 struct drr_begin zc_begin_record; 118 zinject_record_v15_t zc_inject_record; 119 } zfs_cmd_v15_t; 120 121 typedef struct zinject_record_v28 { 122 uint64_t zi_objset; 123 uint64_t zi_object; 124 uint64_t zi_start; 125 uint64_t zi_end; 126 uint64_t zi_guid; 127 uint32_t zi_level; 128 uint32_t zi_error; 129 uint64_t zi_type; 130 uint32_t zi_freq; 131 uint32_t zi_failfast; 132 char zi_func[MAXNAMELEN]; 133 uint32_t zi_iotype; 134 int32_t zi_duration; 135 uint64_t zi_timer; 136 } zinject_record_v28_t; 137 138 typedef struct zfs_cmd_v28 { 139 char zc_name[MAXPATHLEN]; 140 char zc_value[MAXPATHLEN * 2]; 141 char zc_string[MAXNAMELEN]; 142 char zc_top_ds[MAXPATHLEN]; 143 uint64_t zc_guid; 144 uint64_t zc_nvlist_conf; /* really (char *) */ 145 uint64_t zc_nvlist_conf_size; 146 uint64_t zc_nvlist_src; /* really (char *) */ 147 uint64_t zc_nvlist_src_size; 148 uint64_t zc_nvlist_dst; /* really (char *) */ 149 uint64_t zc_nvlist_dst_size; 150 uint64_t zc_cookie; 151 uint64_t zc_objset_type; 152 uint64_t zc_perm_action; 153 uint64_t zc_history; /* really (char *) */ 154 uint64_t zc_history_len; 155 uint64_t zc_history_offset; 156 uint64_t zc_obj; 157 uint64_t zc_iflags; /* internal to zfs(7fs) */ 158 zfs_share_t zc_share; 159 uint64_t zc_jailid; 160 dmu_objset_stats_t zc_objset_stats; 161 struct drr_begin zc_begin_record; 162 zinject_record_v28_t zc_inject_record; 163 boolean_t zc_defer_destroy; 164 boolean_t zc_temphold; 165 uint64_t zc_action_handle; 166 int zc_cleanup_fd; 167 uint8_t zc_simple; 168 uint8_t zc_pad[3]; /* alignment */ 169 uint64_t zc_sendobj; 170 uint64_t zc_fromobj; 171 uint64_t zc_createtxg; 172 zfs_stat_t zc_stat; 173 } zfs_cmd_v28_t; 174 175 typedef struct zinject_record_deadman { 176 uint64_t zi_objset; 177 uint64_t zi_object; 178 uint64_t zi_start; 179 uint64_t zi_end; 180 uint64_t zi_guid; 181 uint32_t zi_level; 182 uint32_t zi_error; 183 uint64_t zi_type; 184 uint32_t zi_freq; 185 uint32_t zi_failfast; 186 char zi_func[MAXNAMELEN]; 187 uint32_t zi_iotype; 188 int32_t zi_duration; 189 uint64_t zi_timer; 190 uint32_t zi_cmd; 191 uint32_t zi_pad; 192 } zinject_record_deadman_t; 193 194 typedef struct zfs_cmd_deadman { 195 char zc_name[MAXPATHLEN]; 196 char zc_value[MAXPATHLEN * 2]; 197 char zc_string[MAXNAMELEN]; 198 char zc_top_ds[MAXPATHLEN]; 199 uint64_t zc_guid; 200 uint64_t zc_nvlist_conf; /* really (char *) */ 201 uint64_t zc_nvlist_conf_size; 202 uint64_t zc_nvlist_src; /* really (char *) */ 203 uint64_t zc_nvlist_src_size; 204 uint64_t zc_nvlist_dst; /* really (char *) */ 205 uint64_t zc_nvlist_dst_size; 206 uint64_t zc_cookie; 207 uint64_t zc_objset_type; 208 uint64_t zc_perm_action; 209 uint64_t zc_history; /* really (char *) */ 210 uint64_t zc_history_len; 211 uint64_t zc_history_offset; 212 uint64_t zc_obj; 213 uint64_t zc_iflags; /* internal to zfs(7fs) */ 214 zfs_share_t zc_share; 215 uint64_t zc_jailid; 216 dmu_objset_stats_t zc_objset_stats; 217 struct drr_begin zc_begin_record; 218 /* zc_inject_record doesn't change in libzfs_core */ 219 zinject_record_deadman_t zc_inject_record; 220 boolean_t zc_defer_destroy; 221 boolean_t zc_temphold; 222 uint64_t zc_action_handle; 223 int zc_cleanup_fd; 224 uint8_t zc_simple; 225 uint8_t zc_pad[3]; /* alignment */ 226 uint64_t zc_sendobj; 227 uint64_t zc_fromobj; 228 uint64_t zc_createtxg; 229 zfs_stat_t zc_stat; 230 } zfs_cmd_deadman_t; 231 232 typedef struct zfs_cmd_zcmd { 233 char zc_name[MAXPATHLEN]; /* name of pool or dataset */ 234 uint64_t zc_nvlist_src; /* really (char *) */ 235 uint64_t zc_nvlist_src_size; 236 uint64_t zc_nvlist_dst; /* really (char *) */ 237 uint64_t zc_nvlist_dst_size; 238 boolean_t zc_nvlist_dst_filled; /* put an nvlist in dst? */ 239 int zc_pad2; 240 241 /* 242 * The following members are for legacy ioctls which haven't been 243 * converted to the new method. 244 */ 245 uint64_t zc_history; /* really (char *) */ 246 char zc_value[MAXPATHLEN * 2]; 247 char zc_string[MAXNAMELEN]; 248 uint64_t zc_guid; 249 uint64_t zc_nvlist_conf; /* really (char *) */ 250 uint64_t zc_nvlist_conf_size; 251 uint64_t zc_cookie; 252 uint64_t zc_objset_type; 253 uint64_t zc_perm_action; 254 uint64_t zc_history_len; 255 uint64_t zc_history_offset; 256 uint64_t zc_obj; 257 uint64_t zc_iflags; /* internal to zfs(7fs) */ 258 zfs_share_t zc_share; 259 uint64_t zc_jailid; 260 dmu_objset_stats_t zc_objset_stats; 261 struct drr_begin zc_begin_record; 262 zinject_record_deadman_t zc_inject_record; 263 boolean_t zc_defer_destroy; 264 boolean_t zc_temphold; 265 uint64_t zc_action_handle; 266 int zc_cleanup_fd; 267 uint8_t zc_simple; 268 uint8_t zc_pad[3]; /* alignment */ 269 uint64_t zc_sendobj; 270 uint64_t zc_fromobj; 271 uint64_t zc_createtxg; 272 zfs_stat_t zc_stat; 273 } zfs_cmd_zcmd_t; 274 275 typedef struct zfs_cmd_edbp { 276 char zc_name[MAXPATHLEN]; /* name of pool or dataset */ 277 uint64_t zc_nvlist_src; /* really (char *) */ 278 uint64_t zc_nvlist_src_size; 279 uint64_t zc_nvlist_dst; /* really (char *) */ 280 uint64_t zc_nvlist_dst_size; 281 boolean_t zc_nvlist_dst_filled; /* put an nvlist in dst? */ 282 int zc_pad2; 283 284 /* 285 * The following members are for legacy ioctls which haven't been 286 * converted to the new method. 287 */ 288 uint64_t zc_history; /* really (char *) */ 289 char zc_value[MAXPATHLEN * 2]; 290 char zc_string[MAXNAMELEN]; 291 uint64_t zc_guid; 292 uint64_t zc_nvlist_conf; /* really (char *) */ 293 uint64_t zc_nvlist_conf_size; 294 uint64_t zc_cookie; 295 uint64_t zc_objset_type; 296 uint64_t zc_perm_action; 297 uint64_t zc_history_len; 298 uint64_t zc_history_offset; 299 uint64_t zc_obj; 300 uint64_t zc_iflags; /* internal to zfs(7fs) */ 301 zfs_share_t zc_share; 302 uint64_t zc_jailid; 303 dmu_objset_stats_t zc_objset_stats; 304 struct drr_begin zc_begin_record; 305 zinject_record_deadman_t zc_inject_record; 306 uint32_t zc_defer_destroy; 307 uint32_t zc_flags; 308 uint64_t zc_action_handle; 309 int zc_cleanup_fd; 310 uint8_t zc_simple; 311 uint8_t zc_pad[3]; /* alignment */ 312 uint64_t zc_sendobj; 313 uint64_t zc_fromobj; 314 uint64_t zc_createtxg; 315 zfs_stat_t zc_stat; 316 } zfs_cmd_edbp_t; 317 318 typedef struct zfs_cmd_resume { 319 char zc_name[MAXPATHLEN]; /* name of pool or dataset */ 320 uint64_t zc_nvlist_src; /* really (char *) */ 321 uint64_t zc_nvlist_src_size; 322 uint64_t zc_nvlist_dst; /* really (char *) */ 323 uint64_t zc_nvlist_dst_size; 324 boolean_t zc_nvlist_dst_filled; /* put an nvlist in dst? */ 325 int zc_pad2; 326 327 /* 328 * The following members are for legacy ioctls which haven't been 329 * converted to the new method. 330 */ 331 uint64_t zc_history; /* really (char *) */ 332 char zc_value[MAXPATHLEN * 2]; 333 char zc_string[MAXNAMELEN]; 334 uint64_t zc_guid; 335 uint64_t zc_nvlist_conf; /* really (char *) */ 336 uint64_t zc_nvlist_conf_size; 337 uint64_t zc_cookie; 338 uint64_t zc_objset_type; 339 uint64_t zc_perm_action; 340 uint64_t zc_history_len; 341 uint64_t zc_history_offset; 342 uint64_t zc_obj; 343 uint64_t zc_iflags; /* internal to zfs(7fs) */ 344 zfs_share_t zc_share; 345 uint64_t zc_jailid; 346 dmu_objset_stats_t zc_objset_stats; 347 dmu_replay_record_t zc_begin_record; 348 zinject_record_deadman_t zc_inject_record; 349 uint32_t zc_defer_destroy; 350 uint32_t zc_flags; 351 uint64_t zc_action_handle; 352 int zc_cleanup_fd; 353 uint8_t zc_simple; 354 boolean_t zc_resumable; 355 uint64_t zc_sendobj; 356 uint64_t zc_fromobj; 357 uint64_t zc_createtxg; 358 zfs_stat_t zc_stat; 359 } zfs_cmd_resume_t; 360 361 typedef struct zfs_cmd_inlanes { 362 char zc_name[MAXPATHLEN]; /* name of pool or dataset */ 363 uint64_t zc_nvlist_src; /* really (char *) */ 364 uint64_t zc_nvlist_src_size; 365 uint64_t zc_nvlist_dst; /* really (char *) */ 366 uint64_t zc_nvlist_dst_size; 367 boolean_t zc_nvlist_dst_filled; /* put an nvlist in dst? */ 368 int zc_pad2; 369 370 /* 371 * The following members are for legacy ioctls which haven't been 372 * converted to the new method. 373 */ 374 uint64_t zc_history; /* really (char *) */ 375 char zc_value[MAXPATHLEN * 2]; 376 char zc_string[MAXNAMELEN]; 377 uint64_t zc_guid; 378 uint64_t zc_nvlist_conf; /* really (char *) */ 379 uint64_t zc_nvlist_conf_size; 380 uint64_t zc_cookie; 381 uint64_t zc_objset_type; 382 uint64_t zc_perm_action; 383 uint64_t zc_history_len; 384 uint64_t zc_history_offset; 385 uint64_t zc_obj; 386 uint64_t zc_iflags; /* internal to zfs(7fs) */ 387 zfs_share_t zc_share; 388 uint64_t zc_jailid; 389 dmu_objset_stats_t zc_objset_stats; 390 dmu_replay_record_t zc_begin_record; 391 zinject_record_t zc_inject_record; 392 uint32_t zc_defer_destroy; 393 uint32_t zc_flags; 394 uint64_t zc_action_handle; 395 int zc_cleanup_fd; 396 uint8_t zc_simple; 397 boolean_t zc_resumable; 398 uint64_t zc_sendobj; 399 uint64_t zc_fromobj; 400 uint64_t zc_createtxg; 401 zfs_stat_t zc_stat; 402 } zfs_cmd_inlanes_t; 403 404 #ifdef _KERNEL 405 static unsigned long zfs_ioctl_v15_to_v28[] = { 406 0, /* 0 ZFS_IOC_POOL_CREATE */ 407 1, /* 1 ZFS_IOC_POOL_DESTROY */ 408 2, /* 2 ZFS_IOC_POOL_IMPORT */ 409 3, /* 3 ZFS_IOC_POOL_EXPORT */ 410 4, /* 4 ZFS_IOC_POOL_CONFIGS */ 411 5, /* 5 ZFS_IOC_POOL_STATS */ 412 6, /* 6 ZFS_IOC_POOL_TRYIMPORT */ 413 7, /* 7 ZFS_IOC_POOL_SCRUB */ 414 8, /* 8 ZFS_IOC_POOL_FREEZE */ 415 9, /* 9 ZFS_IOC_POOL_UPGRADE */ 416 10, /* 10 ZFS_IOC_POOL_GET_HISTORY */ 417 11, /* 11 ZFS_IOC_VDEV_ADD */ 418 12, /* 12 ZFS_IOC_VDEV_REMOVE */ 419 13, /* 13 ZFS_IOC_VDEV_SET_STATE */ 420 14, /* 14 ZFS_IOC_VDEV_ATTACH */ 421 15, /* 15 ZFS_IOC_VDEV_DETACH */ 422 16, /* 16 ZFS_IOC_VDEV_SETPATH */ 423 18, /* 17 ZFS_IOC_OBJSET_STATS */ 424 19, /* 18 ZFS_IOC_OBJSET_ZPLPROPS */ 425 20, /* 19 ZFS_IOC_DATASET_LIST_NEXT */ 426 21, /* 20 ZFS_IOC_SNAPSHOT_LIST_NEXT */ 427 22, /* 21 ZFS_IOC_SET_PROP */ 428 ZFS_IOC_COMPAT_PASS, /* 22 ZFS_IOC_CREATE_MINOR */ 429 ZFS_IOC_COMPAT_PASS, /* 23 ZFS_IOC_REMOVE_MINOR */ 430 23, /* 24 ZFS_IOC_CREATE */ 431 24, /* 25 ZFS_IOC_DESTROY */ 432 25, /* 26 ZFS_IOC_ROLLBACK */ 433 26, /* 27 ZFS_IOC_RENAME */ 434 27, /* 28 ZFS_IOC_RECV */ 435 28, /* 29 ZFS_IOC_SEND */ 436 29, /* 30 ZFS_IOC_INJECT_FAULT */ 437 30, /* 31 ZFS_IOC_CLEAR_FAULT */ 438 31, /* 32 ZFS_IOC_INJECT_LIST_NEXT */ 439 32, /* 33 ZFS_IOC_ERROR_LOG */ 440 33, /* 34 ZFS_IOC_CLEAR */ 441 34, /* 35 ZFS_IOC_PROMOTE */ 442 35, /* 36 ZFS_IOC_DESTROY_SNAPS */ 443 36, /* 37 ZFS_IOC_SNAPSHOT */ 444 37, /* 38 ZFS_IOC_DSOBJ_TO_DSNAME */ 445 38, /* 39 ZFS_IOC_OBJ_TO_PATH */ 446 39, /* 40 ZFS_IOC_POOL_SET_PROPS */ 447 40, /* 41 ZFS_IOC_POOL_GET_PROPS */ 448 41, /* 42 ZFS_IOC_SET_FSACL */ 449 42, /* 43 ZFS_IOC_GET_FSACL */ 450 ZFS_IOC_COMPAT_PASS, /* 44 ZFS_IOC_ISCSI_PERM_CHECK */ 451 43, /* 45 ZFS_IOC_SHARE */ 452 44, /* 46 ZFS_IOC_IHNERIT_PROP */ 453 58, /* 47 ZFS_IOC_JAIL */ 454 59, /* 48 ZFS_IOC_UNJAIL */ 455 45, /* 49 ZFS_IOC_SMB_ACL */ 456 46, /* 50 ZFS_IOC_USERSPACE_ONE */ 457 47, /* 51 ZFS_IOC_USERSPACE_MANY */ 458 48, /* 52 ZFS_IOC_USERSPACE_UPGRADE */ 459 17, /* 53 ZFS_IOC_SETFRU */ 460 }; 461 462 #else /* KERNEL */ 463 static unsigned long zfs_ioctl_v28_to_v15[] = { 464 0, /* 0 ZFS_IOC_POOL_CREATE */ 465 1, /* 1 ZFS_IOC_POOL_DESTROY */ 466 2, /* 2 ZFS_IOC_POOL_IMPORT */ 467 3, /* 3 ZFS_IOC_POOL_EXPORT */ 468 4, /* 4 ZFS_IOC_POOL_CONFIGS */ 469 5, /* 5 ZFS_IOC_POOL_STATS */ 470 6, /* 6 ZFS_IOC_POOL_TRYIMPORT */ 471 7, /* 7 ZFS_IOC_POOL_SCAN */ 472 8, /* 8 ZFS_IOC_POOL_FREEZE */ 473 9, /* 9 ZFS_IOC_POOL_UPGRADE */ 474 10, /* 10 ZFS_IOC_POOL_GET_HISTORY */ 475 11, /* 11 ZFS_IOC_VDEV_ADD */ 476 12, /* 12 ZFS_IOC_VDEV_REMOVE */ 477 13, /* 13 ZFS_IOC_VDEV_SET_STATE */ 478 14, /* 14 ZFS_IOC_VDEV_ATTACH */ 479 15, /* 15 ZFS_IOC_VDEV_DETACH */ 480 16, /* 16 ZFS_IOC_VDEV_SETPATH */ 481 53, /* 17 ZFS_IOC_VDEV_SETFRU */ 482 17, /* 18 ZFS_IOC_OBJSET_STATS */ 483 18, /* 19 ZFS_IOC_OBJSET_ZPLPROPS */ 484 19, /* 20 ZFS_IOC_DATASET_LIST_NEXT */ 485 20, /* 21 ZFS_IOC_SNAPSHOT_LIST_NEXT */ 486 21, /* 22 ZFS_IOC_SET_PROP */ 487 24, /* 23 ZFS_IOC_CREATE */ 488 25, /* 24 ZFS_IOC_DESTROY */ 489 26, /* 25 ZFS_IOC_ROLLBACK */ 490 27, /* 26 ZFS_IOC_RENAME */ 491 28, /* 27 ZFS_IOC_RECV */ 492 29, /* 28 ZFS_IOC_SEND */ 493 30, /* 39 ZFS_IOC_INJECT_FAULT */ 494 31, /* 30 ZFS_IOC_CLEAR_FAULT */ 495 32, /* 31 ZFS_IOC_INJECT_LIST_NEXT */ 496 33, /* 32 ZFS_IOC_ERROR_LOG */ 497 34, /* 33 ZFS_IOC_CLEAR */ 498 35, /* 34 ZFS_IOC_PROMOTE */ 499 36, /* 35 ZFS_IOC_DESTROY_SNAPS */ 500 37, /* 36 ZFS_IOC_SNAPSHOT */ 501 38, /* 37 ZFS_IOC_DSOBJ_TO_DSNAME */ 502 39, /* 38 ZFS_IOC_OBJ_TO_PATH */ 503 40, /* 39 ZFS_IOC_POOL_SET_PROPS */ 504 41, /* 40 ZFS_IOC_POOL_GET_PROPS */ 505 42, /* 41 ZFS_IOC_SET_FSACL */ 506 43, /* 42 ZFS_IOC_GET_FSACL */ 507 45, /* 43 ZFS_IOC_SHARE */ 508 46, /* 44 ZFS_IOC_IHNERIT_PROP */ 509 49, /* 45 ZFS_IOC_SMB_ACL */ 510 50, /* 46 ZFS_IOC_USERSPACE_ONE */ 511 51, /* 47 ZFS_IOC_USERSPACE_MANY */ 512 52, /* 48 ZFS_IOC_USERSPACE_UPGRADE */ 513 ZFS_IOC_COMPAT_FAIL, /* 49 ZFS_IOC_HOLD */ 514 ZFS_IOC_COMPAT_FAIL, /* 50 ZFS_IOC_RELEASE */ 515 ZFS_IOC_COMPAT_FAIL, /* 51 ZFS_IOC_GET_HOLDS */ 516 ZFS_IOC_COMPAT_FAIL, /* 52 ZFS_IOC_OBJSET_RECVD_PROPS */ 517 ZFS_IOC_COMPAT_FAIL, /* 53 ZFS_IOC_VDEV_SPLIT */ 518 ZFS_IOC_COMPAT_FAIL, /* 54 ZFS_IOC_NEXT_OBJ */ 519 ZFS_IOC_COMPAT_FAIL, /* 55 ZFS_IOC_DIFF */ 520 ZFS_IOC_COMPAT_FAIL, /* 56 ZFS_IOC_TMP_SNAPSHOT */ 521 ZFS_IOC_COMPAT_FAIL, /* 57 ZFS_IOC_OBJ_TO_STATS */ 522 47, /* 58 ZFS_IOC_JAIL */ 523 48, /* 59 ZFS_IOC_UNJAIL */ 524 }; 525 #endif /* ! _KERNEL */ 526 527 #ifdef _KERNEL 528 int zfs_ioctl_compat_pre(zfs_cmd_t *, int *, const int); 529 void zfs_ioctl_compat_post(zfs_cmd_t *, const int, const int); 530 nvlist_t *zfs_ioctl_compat_innvl(zfs_cmd_t *, nvlist_t *, const int, 531 const int); 532 nvlist_t *zfs_ioctl_compat_outnvl(zfs_cmd_t *, nvlist_t *, const int, 533 const int); 534 #else 535 int zcmd_ioctl_compat(int, int, zfs_cmd_t *, const int); 536 #endif /* _KERNEL */ 537 void zfs_cmd_compat_get(zfs_cmd_t *, caddr_t, const int); 538 void zfs_cmd_compat_put(zfs_cmd_t *, caddr_t, const int, const int); 539 540 #ifdef __cplusplus 541 } 542 #endif 543 544 #endif /* _SYS_ZFS_IOCTL_COMPAT_H */ 545