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
42extern "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
77typedef 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
83typedef 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
96typedef 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
121typedef 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
138typedef 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
175typedef 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
194typedef 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
232typedef 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
275typedef 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
318typedef 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
361typedef 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
405static 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 */
463static 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
528int zfs_ioctl_compat_pre(zfs_cmd_t *, int *, const int);
529void zfs_ioctl_compat_post(zfs_cmd_t *, const int, const int);
530nvlist_t *zfs_ioctl_compat_innvl(zfs_cmd_t *, nvlist_t *, const int,
531 const int);
532nvlist_t *zfs_ioctl_compat_outnvl(zfs_cmd_t *, nvlist_t *, const int,
533 const int);
534#else
535int zcmd_ioctl_compat(int, int, zfs_cmd_t *, const int);
536#endif /* _KERNEL */
537void zfs_cmd_compat_get(zfs_cmd_t *, caddr_t, const int);
538void 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