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 | |