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