1eda14cbcSMatt Macy /*
2eda14cbcSMatt Macy * Copyright (c) 2020 iXsystems, Inc.
3eda14cbcSMatt Macy * All rights reserved.
4eda14cbcSMatt Macy *
5eda14cbcSMatt Macy * Redistribution and use in source and binary forms, with or without
6eda14cbcSMatt Macy * modification, are permitted provided that the following conditions
7eda14cbcSMatt Macy * are met:
8eda14cbcSMatt Macy * 1. Redistributions of source code must retain the above copyright
9eda14cbcSMatt Macy * notice, this list of conditions and the following disclaimer.
10eda14cbcSMatt Macy * 2. Redistributions in binary form must reproduce the above copyright
11eda14cbcSMatt Macy * notice, this list of conditions and the following disclaimer in the
12eda14cbcSMatt Macy * documentation and/or other materials provided with the distribution.
13eda14cbcSMatt Macy *
14eda14cbcSMatt Macy * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
15eda14cbcSMatt Macy * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16eda14cbcSMatt Macy * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17eda14cbcSMatt Macy * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
18eda14cbcSMatt Macy * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19eda14cbcSMatt Macy * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20eda14cbcSMatt Macy * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21eda14cbcSMatt Macy * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22eda14cbcSMatt Macy * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23eda14cbcSMatt Macy * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24eda14cbcSMatt Macy * SUCH DAMAGE.
25eda14cbcSMatt Macy *
26eda14cbcSMatt Macy */
27eda14cbcSMatt Macy
28eda14cbcSMatt Macy #include <sys/types.h>
29eda14cbcSMatt Macy #include <sys/param.h>
30eda14cbcSMatt Macy #include <sys/conf.h>
31eda14cbcSMatt Macy #include <sys/kernel.h>
32eda14cbcSMatt Macy #include <sys/lock.h>
33eda14cbcSMatt Macy #include <sys/malloc.h>
34eda14cbcSMatt Macy #include <sys/mutex.h>
35eda14cbcSMatt Macy #include <sys/errno.h>
36eda14cbcSMatt Macy #include <sys/cmn_err.h>
37eda14cbcSMatt Macy #include <sys/zfs_ioctl_compat.h>
38eda14cbcSMatt Macy
39*dbd5678dSMartin Matuska #ifdef ZFS_LEGACY_SUPPORT
40eda14cbcSMatt Macy enum zfs_ioc_legacy {
41eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE = -1,
42eda14cbcSMatt Macy ZFS_IOC_LEGACY_FIRST = 0,
43eda14cbcSMatt Macy ZFS_LEGACY_IOC = ZFS_IOC_LEGACY_FIRST,
44eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_CREATE = ZFS_IOC_LEGACY_FIRST,
45eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_DESTROY,
46eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_IMPORT,
47eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_EXPORT,
48eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_CONFIGS,
49eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_STATS,
50eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_TRYIMPORT,
51eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_SCAN,
52eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_FREEZE,
53eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_UPGRADE,
54eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_GET_HISTORY,
55eda14cbcSMatt Macy ZFS_IOC_LEGACY_VDEV_ADD,
56eda14cbcSMatt Macy ZFS_IOC_LEGACY_VDEV_REMOVE,
57eda14cbcSMatt Macy ZFS_IOC_LEGACY_VDEV_SET_STATE,
58eda14cbcSMatt Macy ZFS_IOC_LEGACY_VDEV_ATTACH,
59eda14cbcSMatt Macy ZFS_IOC_LEGACY_VDEV_DETACH,
60eda14cbcSMatt Macy ZFS_IOC_LEGACY_VDEV_SETPATH,
61eda14cbcSMatt Macy ZFS_IOC_LEGACY_VDEV_SETFRU,
62eda14cbcSMatt Macy ZFS_IOC_LEGACY_OBJSET_STATS,
63eda14cbcSMatt Macy ZFS_IOC_LEGACY_OBJSET_ZPLPROPS,
64eda14cbcSMatt Macy ZFS_IOC_LEGACY_DATASET_LIST_NEXT,
65eda14cbcSMatt Macy ZFS_IOC_LEGACY_SNAPSHOT_LIST_NEXT,
66eda14cbcSMatt Macy ZFS_IOC_LEGACY_SET_PROP,
67eda14cbcSMatt Macy ZFS_IOC_LEGACY_CREATE,
68eda14cbcSMatt Macy ZFS_IOC_LEGACY_DESTROY,
69eda14cbcSMatt Macy ZFS_IOC_LEGACY_ROLLBACK,
70eda14cbcSMatt Macy ZFS_IOC_LEGACY_RENAME,
71eda14cbcSMatt Macy ZFS_IOC_LEGACY_RECV,
72eda14cbcSMatt Macy ZFS_IOC_LEGACY_SEND,
73eda14cbcSMatt Macy ZFS_IOC_LEGACY_INJECT_FAULT,
74eda14cbcSMatt Macy ZFS_IOC_LEGACY_CLEAR_FAULT,
75eda14cbcSMatt Macy ZFS_IOC_LEGACY_INJECT_LIST_NEXT,
76eda14cbcSMatt Macy ZFS_IOC_LEGACY_ERROR_LOG,
77eda14cbcSMatt Macy ZFS_IOC_LEGACY_CLEAR,
78eda14cbcSMatt Macy ZFS_IOC_LEGACY_PROMOTE,
79eda14cbcSMatt Macy ZFS_IOC_LEGACY_DESTROY_SNAPS,
80eda14cbcSMatt Macy ZFS_IOC_LEGACY_SNAPSHOT,
81eda14cbcSMatt Macy ZFS_IOC_LEGACY_DSOBJ_TO_DSNAME,
82eda14cbcSMatt Macy ZFS_IOC_LEGACY_OBJ_TO_PATH,
83eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_SET_PROPS,
84eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_GET_PROPS,
85eda14cbcSMatt Macy ZFS_IOC_LEGACY_SET_FSACL,
86eda14cbcSMatt Macy ZFS_IOC_LEGACY_GET_FSACL,
87eda14cbcSMatt Macy ZFS_IOC_LEGACY_SHARE,
88eda14cbcSMatt Macy ZFS_IOC_LEGACY_INHERIT_PROP,
89eda14cbcSMatt Macy ZFS_IOC_LEGACY_SMB_ACL,
90eda14cbcSMatt Macy ZFS_IOC_LEGACY_USERSPACE_ONE,
91eda14cbcSMatt Macy ZFS_IOC_LEGACY_USERSPACE_MANY,
92eda14cbcSMatt Macy ZFS_IOC_LEGACY_USERSPACE_UPGRADE,
93eda14cbcSMatt Macy ZFS_IOC_LEGACY_HOLD,
94eda14cbcSMatt Macy ZFS_IOC_LEGACY_RELEASE,
95eda14cbcSMatt Macy ZFS_IOC_LEGACY_GET_HOLDS,
96eda14cbcSMatt Macy ZFS_IOC_LEGACY_OBJSET_RECVD_PROPS,
97eda14cbcSMatt Macy ZFS_IOC_LEGACY_VDEV_SPLIT,
98eda14cbcSMatt Macy ZFS_IOC_LEGACY_NEXT_OBJ,
99eda14cbcSMatt Macy ZFS_IOC_LEGACY_DIFF,
100eda14cbcSMatt Macy ZFS_IOC_LEGACY_TMP_SNAPSHOT,
101eda14cbcSMatt Macy ZFS_IOC_LEGACY_OBJ_TO_STATS,
102eda14cbcSMatt Macy ZFS_IOC_LEGACY_JAIL,
103eda14cbcSMatt Macy ZFS_IOC_LEGACY_UNJAIL,
104eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_REGUID,
105eda14cbcSMatt Macy ZFS_IOC_LEGACY_SPACE_WRITTEN,
106eda14cbcSMatt Macy ZFS_IOC_LEGACY_SPACE_SNAPS,
107eda14cbcSMatt Macy ZFS_IOC_LEGACY_SEND_PROGRESS,
108eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_REOPEN,
109eda14cbcSMatt Macy ZFS_IOC_LEGACY_LOG_HISTORY,
110eda14cbcSMatt Macy ZFS_IOC_LEGACY_SEND_NEW,
111eda14cbcSMatt Macy ZFS_IOC_LEGACY_SEND_SPACE,
112eda14cbcSMatt Macy ZFS_IOC_LEGACY_CLONE,
113eda14cbcSMatt Macy ZFS_IOC_LEGACY_BOOKMARK,
114eda14cbcSMatt Macy ZFS_IOC_LEGACY_GET_BOOKMARKS,
115eda14cbcSMatt Macy ZFS_IOC_LEGACY_DESTROY_BOOKMARKS,
116eda14cbcSMatt Macy ZFS_IOC_LEGACY_NEXTBOOT,
117eda14cbcSMatt Macy ZFS_IOC_LEGACY_CHANNEL_PROGRAM,
118eda14cbcSMatt Macy ZFS_IOC_LEGACY_REMAP,
119eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_CHECKPOINT,
120eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_DISCARD_CHECKPOINT,
121eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_INITIALIZE,
122eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_SYNC,
123eda14cbcSMatt Macy ZFS_IOC_LEGACY_LAST
124eda14cbcSMatt Macy };
125eda14cbcSMatt Macy
126271171e0SMartin Matuska static unsigned long zfs_ioctl_legacy_to_ozfs_[] = {
127eda14cbcSMatt Macy ZFS_IOC_POOL_CREATE, /* 0x00 */
128eda14cbcSMatt Macy ZFS_IOC_POOL_DESTROY, /* 0x01 */
129eda14cbcSMatt Macy ZFS_IOC_POOL_IMPORT, /* 0x02 */
130eda14cbcSMatt Macy ZFS_IOC_POOL_EXPORT, /* 0x03 */
131eda14cbcSMatt Macy ZFS_IOC_POOL_CONFIGS, /* 0x04 */
132eda14cbcSMatt Macy ZFS_IOC_POOL_STATS, /* 0x05 */
133eda14cbcSMatt Macy ZFS_IOC_POOL_TRYIMPORT, /* 0x06 */
134eda14cbcSMatt Macy ZFS_IOC_POOL_SCAN, /* 0x07 */
135eda14cbcSMatt Macy ZFS_IOC_POOL_FREEZE, /* 0x08 */
136eda14cbcSMatt Macy ZFS_IOC_POOL_UPGRADE, /* 0x09 */
137eda14cbcSMatt Macy ZFS_IOC_POOL_GET_HISTORY, /* 0x0a */
138eda14cbcSMatt Macy ZFS_IOC_VDEV_ADD, /* 0x0b */
139eda14cbcSMatt Macy ZFS_IOC_VDEV_REMOVE, /* 0x0c */
140eda14cbcSMatt Macy ZFS_IOC_VDEV_SET_STATE, /* 0x0d */
141eda14cbcSMatt Macy ZFS_IOC_VDEV_ATTACH, /* 0x0e */
142eda14cbcSMatt Macy ZFS_IOC_VDEV_DETACH, /* 0x0f */
143eda14cbcSMatt Macy ZFS_IOC_VDEV_SETPATH, /* 0x10 */
144eda14cbcSMatt Macy ZFS_IOC_VDEV_SETFRU, /* 0x11 */
145eda14cbcSMatt Macy ZFS_IOC_OBJSET_STATS, /* 0x12 */
146eda14cbcSMatt Macy ZFS_IOC_OBJSET_ZPLPROPS, /* 0x13 */
147eda14cbcSMatt Macy ZFS_IOC_DATASET_LIST_NEXT, /* 0x14 */
148eda14cbcSMatt Macy ZFS_IOC_SNAPSHOT_LIST_NEXT, /* 0x15 */
149eda14cbcSMatt Macy ZFS_IOC_SET_PROP, /* 0x16 */
150eda14cbcSMatt Macy ZFS_IOC_CREATE, /* 0x17 */
151eda14cbcSMatt Macy ZFS_IOC_DESTROY, /* 0x18 */
152eda14cbcSMatt Macy ZFS_IOC_ROLLBACK, /* 0x19 */
153eda14cbcSMatt Macy ZFS_IOC_RENAME, /* 0x1a */
154eda14cbcSMatt Macy ZFS_IOC_RECV, /* 0x1b */
155eda14cbcSMatt Macy ZFS_IOC_SEND, /* 0x1c */
156eda14cbcSMatt Macy ZFS_IOC_INJECT_FAULT, /* 0x1d */
157eda14cbcSMatt Macy ZFS_IOC_CLEAR_FAULT, /* 0x1e */
158eda14cbcSMatt Macy ZFS_IOC_INJECT_LIST_NEXT, /* 0x1f */
159eda14cbcSMatt Macy ZFS_IOC_ERROR_LOG, /* 0x20 */
160eda14cbcSMatt Macy ZFS_IOC_CLEAR, /* 0x21 */
161eda14cbcSMatt Macy ZFS_IOC_PROMOTE, /* 0x22 */
162eda14cbcSMatt Macy /* start of mismatch */
163eda14cbcSMatt Macy
164eda14cbcSMatt Macy ZFS_IOC_DESTROY_SNAPS, /* 0x23:0x3b */
165eda14cbcSMatt Macy ZFS_IOC_SNAPSHOT, /* 0x24:0x23 */
166eda14cbcSMatt Macy ZFS_IOC_DSOBJ_TO_DSNAME, /* 0x25:0x24 */
167eda14cbcSMatt Macy ZFS_IOC_OBJ_TO_PATH, /* 0x26:0x25 */
168eda14cbcSMatt Macy ZFS_IOC_POOL_SET_PROPS, /* 0x27:0x26 */
169eda14cbcSMatt Macy ZFS_IOC_POOL_GET_PROPS, /* 0x28:0x27 */
170eda14cbcSMatt Macy ZFS_IOC_SET_FSACL, /* 0x29:0x28 */
171eda14cbcSMatt Macy ZFS_IOC_GET_FSACL, /* 0x30:0x29 */
172eda14cbcSMatt Macy ZFS_IOC_SHARE, /* 0x2b:0x2a */
173eda14cbcSMatt Macy ZFS_IOC_INHERIT_PROP, /* 0x2c:0x2b */
174eda14cbcSMatt Macy ZFS_IOC_SMB_ACL, /* 0x2d:0x2c */
175eda14cbcSMatt Macy ZFS_IOC_USERSPACE_ONE, /* 0x2e:0x2d */
176eda14cbcSMatt Macy ZFS_IOC_USERSPACE_MANY, /* 0x2f:0x2e */
177eda14cbcSMatt Macy ZFS_IOC_USERSPACE_UPGRADE, /* 0x30:0x2f */
178eda14cbcSMatt Macy ZFS_IOC_HOLD, /* 0x31:0x30 */
179eda14cbcSMatt Macy ZFS_IOC_RELEASE, /* 0x32:0x31 */
180eda14cbcSMatt Macy ZFS_IOC_GET_HOLDS, /* 0x33:0x32 */
181eda14cbcSMatt Macy ZFS_IOC_OBJSET_RECVD_PROPS, /* 0x34:0x33 */
182eda14cbcSMatt Macy ZFS_IOC_VDEV_SPLIT, /* 0x35:0x34 */
183eda14cbcSMatt Macy ZFS_IOC_NEXT_OBJ, /* 0x36:0x35 */
184eda14cbcSMatt Macy ZFS_IOC_DIFF, /* 0x37:0x36 */
185eda14cbcSMatt Macy ZFS_IOC_TMP_SNAPSHOT, /* 0x38:0x37 */
186eda14cbcSMatt Macy ZFS_IOC_OBJ_TO_STATS, /* 0x39:0x38 */
187eda14cbcSMatt Macy ZFS_IOC_JAIL, /* 0x3a:0xc2 */
188eda14cbcSMatt Macy ZFS_IOC_UNJAIL, /* 0x3b:0xc3 */
189eda14cbcSMatt Macy ZFS_IOC_POOL_REGUID, /* 0x3c:0x3c */
190eda14cbcSMatt Macy ZFS_IOC_SPACE_WRITTEN, /* 0x3d:0x39 */
191eda14cbcSMatt Macy ZFS_IOC_SPACE_SNAPS, /* 0x3e:0x3a */
192eda14cbcSMatt Macy ZFS_IOC_SEND_PROGRESS, /* 0x3f:0x3e */
193eda14cbcSMatt Macy ZFS_IOC_POOL_REOPEN, /* 0x40:0x3d */
194eda14cbcSMatt Macy ZFS_IOC_LOG_HISTORY, /* 0x41:0x3f */
195eda14cbcSMatt Macy ZFS_IOC_SEND_NEW, /* 0x42:0x40 */
196eda14cbcSMatt Macy ZFS_IOC_SEND_SPACE, /* 0x43:0x41 */
197eda14cbcSMatt Macy ZFS_IOC_CLONE, /* 0x44:0x42 */
198eda14cbcSMatt Macy ZFS_IOC_BOOKMARK, /* 0x45:0x43 */
199eda14cbcSMatt Macy ZFS_IOC_GET_BOOKMARKS, /* 0x46:0x44 */
200eda14cbcSMatt Macy ZFS_IOC_DESTROY_BOOKMARKS, /* 0x47:0x45 */
201eda14cbcSMatt Macy ZFS_IOC_NEXTBOOT, /* 0x48:0xc1 */
202eda14cbcSMatt Macy ZFS_IOC_CHANNEL_PROGRAM, /* 0x49:0x48 */
203eda14cbcSMatt Macy ZFS_IOC_REMAP, /* 0x4a:0x4c */
204eda14cbcSMatt Macy ZFS_IOC_POOL_CHECKPOINT, /* 0x4b:0x4d */
205eda14cbcSMatt Macy ZFS_IOC_POOL_DISCARD_CHECKPOINT, /* 0x4c:0x4e */
206eda14cbcSMatt Macy ZFS_IOC_POOL_INITIALIZE, /* 0x4d:0x4f */
207eda14cbcSMatt Macy };
208eda14cbcSMatt Macy
209271171e0SMartin Matuska static unsigned long zfs_ioctl_ozfs_to_legacy_common_[] = {
210eda14cbcSMatt Macy ZFS_IOC_POOL_CREATE, /* 0x00 */
211eda14cbcSMatt Macy ZFS_IOC_POOL_DESTROY, /* 0x01 */
212eda14cbcSMatt Macy ZFS_IOC_POOL_IMPORT, /* 0x02 */
213eda14cbcSMatt Macy ZFS_IOC_POOL_EXPORT, /* 0x03 */
214eda14cbcSMatt Macy ZFS_IOC_POOL_CONFIGS, /* 0x04 */
215eda14cbcSMatt Macy ZFS_IOC_POOL_STATS, /* 0x05 */
216eda14cbcSMatt Macy ZFS_IOC_POOL_TRYIMPORT, /* 0x06 */
217eda14cbcSMatt Macy ZFS_IOC_POOL_SCAN, /* 0x07 */
218eda14cbcSMatt Macy ZFS_IOC_POOL_FREEZE, /* 0x08 */
219eda14cbcSMatt Macy ZFS_IOC_POOL_UPGRADE, /* 0x09 */
220eda14cbcSMatt Macy ZFS_IOC_POOL_GET_HISTORY, /* 0x0a */
221eda14cbcSMatt Macy ZFS_IOC_VDEV_ADD, /* 0x0b */
222eda14cbcSMatt Macy ZFS_IOC_VDEV_REMOVE, /* 0x0c */
223eda14cbcSMatt Macy ZFS_IOC_VDEV_SET_STATE, /* 0x0d */
224eda14cbcSMatt Macy ZFS_IOC_VDEV_ATTACH, /* 0x0e */
225eda14cbcSMatt Macy ZFS_IOC_VDEV_DETACH, /* 0x0f */
226eda14cbcSMatt Macy ZFS_IOC_VDEV_SETPATH, /* 0x10 */
227eda14cbcSMatt Macy ZFS_IOC_VDEV_SETFRU, /* 0x11 */
228eda14cbcSMatt Macy ZFS_IOC_OBJSET_STATS, /* 0x12 */
229eda14cbcSMatt Macy ZFS_IOC_OBJSET_ZPLPROPS, /* 0x13 */
230eda14cbcSMatt Macy ZFS_IOC_DATASET_LIST_NEXT, /* 0x14 */
231eda14cbcSMatt Macy ZFS_IOC_SNAPSHOT_LIST_NEXT, /* 0x15 */
232eda14cbcSMatt Macy ZFS_IOC_SET_PROP, /* 0x16 */
233eda14cbcSMatt Macy ZFS_IOC_CREATE, /* 0x17 */
234eda14cbcSMatt Macy ZFS_IOC_DESTROY, /* 0x18 */
235eda14cbcSMatt Macy ZFS_IOC_ROLLBACK, /* 0x19 */
236eda14cbcSMatt Macy ZFS_IOC_RENAME, /* 0x1a */
237eda14cbcSMatt Macy ZFS_IOC_RECV, /* 0x1b */
238eda14cbcSMatt Macy ZFS_IOC_SEND, /* 0x1c */
239eda14cbcSMatt Macy ZFS_IOC_INJECT_FAULT, /* 0x1d */
240eda14cbcSMatt Macy ZFS_IOC_CLEAR_FAULT, /* 0x1e */
241eda14cbcSMatt Macy ZFS_IOC_INJECT_LIST_NEXT, /* 0x1f */
242eda14cbcSMatt Macy ZFS_IOC_ERROR_LOG, /* 0x20 */
243eda14cbcSMatt Macy ZFS_IOC_CLEAR, /* 0x21 */
244eda14cbcSMatt Macy ZFS_IOC_PROMOTE, /* 0x22 */
245eda14cbcSMatt Macy /* start of mismatch */
246eda14cbcSMatt Macy ZFS_IOC_LEGACY_SNAPSHOT, /* 0x23 */
247eda14cbcSMatt Macy ZFS_IOC_LEGACY_DSOBJ_TO_DSNAME, /* 0x24 */
248eda14cbcSMatt Macy ZFS_IOC_LEGACY_OBJ_TO_PATH, /* 0x25 */
249eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_SET_PROPS, /* 0x26 */
250eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_GET_PROPS, /* 0x27 */
251eda14cbcSMatt Macy ZFS_IOC_LEGACY_SET_FSACL, /* 0x28 */
252eda14cbcSMatt Macy ZFS_IOC_LEGACY_GET_FSACL, /* 0x29 */
253eda14cbcSMatt Macy ZFS_IOC_LEGACY_SHARE, /* 0x2a */
254eda14cbcSMatt Macy ZFS_IOC_LEGACY_INHERIT_PROP, /* 0x2b */
255eda14cbcSMatt Macy ZFS_IOC_LEGACY_SMB_ACL, /* 0x2c */
256eda14cbcSMatt Macy ZFS_IOC_LEGACY_USERSPACE_ONE, /* 0x2d */
257eda14cbcSMatt Macy ZFS_IOC_LEGACY_USERSPACE_MANY, /* 0x2e */
258eda14cbcSMatt Macy ZFS_IOC_LEGACY_USERSPACE_UPGRADE, /* 0x2f */
259eda14cbcSMatt Macy ZFS_IOC_LEGACY_HOLD, /* 0x30 */
260eda14cbcSMatt Macy ZFS_IOC_LEGACY_RELEASE, /* 0x31 */
261eda14cbcSMatt Macy ZFS_IOC_LEGACY_GET_HOLDS, /* 0x32 */
262eda14cbcSMatt Macy ZFS_IOC_LEGACY_OBJSET_RECVD_PROPS, /* 0x33 */
263eda14cbcSMatt Macy ZFS_IOC_LEGACY_VDEV_SPLIT, /* 0x34 */
264eda14cbcSMatt Macy ZFS_IOC_LEGACY_NEXT_OBJ, /* 0x35 */
265eda14cbcSMatt Macy ZFS_IOC_LEGACY_DIFF, /* 0x36 */
266eda14cbcSMatt Macy ZFS_IOC_LEGACY_TMP_SNAPSHOT, /* 0x37 */
267eda14cbcSMatt Macy ZFS_IOC_LEGACY_OBJ_TO_STATS, /* 0x38 */
268eda14cbcSMatt Macy ZFS_IOC_LEGACY_SPACE_WRITTEN, /* 0x39 */
269eda14cbcSMatt Macy ZFS_IOC_LEGACY_SPACE_SNAPS, /* 0x3a */
270eda14cbcSMatt Macy ZFS_IOC_LEGACY_DESTROY_SNAPS, /* 0x3b */
271eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_REGUID, /* 0x3c */
272eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_REOPEN, /* 0x3d */
273eda14cbcSMatt Macy ZFS_IOC_LEGACY_SEND_PROGRESS, /* 0x3e */
274eda14cbcSMatt Macy ZFS_IOC_LEGACY_LOG_HISTORY, /* 0x3f */
275eda14cbcSMatt Macy ZFS_IOC_LEGACY_SEND_NEW, /* 0x40 */
276eda14cbcSMatt Macy ZFS_IOC_LEGACY_SEND_SPACE, /* 0x41 */
277eda14cbcSMatt Macy ZFS_IOC_LEGACY_CLONE, /* 0x42 */
278eda14cbcSMatt Macy ZFS_IOC_LEGACY_BOOKMARK, /* 0x43 */
279eda14cbcSMatt Macy ZFS_IOC_LEGACY_GET_BOOKMARKS, /* 0x44 */
280eda14cbcSMatt Macy ZFS_IOC_LEGACY_DESTROY_BOOKMARKS, /* 0x45 */
281eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_RECV_NEW */
282eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_SYNC, /* 0x47 */
283eda14cbcSMatt Macy ZFS_IOC_LEGACY_CHANNEL_PROGRAM, /* 0x48 */
284eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_LOAD_KEY */
285eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_UNLOAD_KEY */
286eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_CHANGE_KEY */
287eda14cbcSMatt Macy ZFS_IOC_LEGACY_REMAP, /* 0x4c */
288eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_CHECKPOINT, /* 0x4d */
289eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_DISCARD_CHECKPOINT, /* 0x4e */
290eda14cbcSMatt Macy ZFS_IOC_LEGACY_POOL_INITIALIZE, /* 0x4f */
291eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_POOL_TRIM */
292eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_REDACT */
293eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_GET_BOOKMARK_PROPS */
294eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_WAIT */
295eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_WAIT_FS */
296eda14cbcSMatt Macy };
297eda14cbcSMatt Macy
298271171e0SMartin Matuska static unsigned long zfs_ioctl_ozfs_to_legacy_platform_[] = {
299eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_EVENTS_NEXT */
300eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_EVENTS_CLEAR */
301eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_EVENTS_SEEK */
302eda14cbcSMatt Macy ZFS_IOC_LEGACY_NEXTBOOT,
303eda14cbcSMatt Macy ZFS_IOC_LEGACY_JAIL,
304eda14cbcSMatt Macy ZFS_IOC_LEGACY_UNJAIL,
305eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_SET_BOOTENV */
306eda14cbcSMatt Macy ZFS_IOC_LEGACY_NONE, /* ZFS_IOC_GET_BOOTENV */
307eda14cbcSMatt Macy };
308eda14cbcSMatt Macy
309eda14cbcSMatt Macy int
zfs_ioctl_legacy_to_ozfs(int request)310eda14cbcSMatt Macy zfs_ioctl_legacy_to_ozfs(int request)
311eda14cbcSMatt Macy {
312eda14cbcSMatt Macy if (request >= sizeof (zfs_ioctl_legacy_to_ozfs_)/sizeof (long))
313eda14cbcSMatt Macy return (-1);
314eda14cbcSMatt Macy return (zfs_ioctl_legacy_to_ozfs_[request]);
315eda14cbcSMatt Macy }
316eda14cbcSMatt Macy
317eda14cbcSMatt Macy int
zfs_ioctl_ozfs_to_legacy(int request)318eda14cbcSMatt Macy zfs_ioctl_ozfs_to_legacy(int request)
319eda14cbcSMatt Macy {
320*dbd5678dSMartin Matuska if (request >= ZFS_IOC_LAST)
321eda14cbcSMatt Macy return (-1);
322eda14cbcSMatt Macy
323c40487d4SMatt Macy if (request > ZFS_IOC_PLATFORM) {
324c40487d4SMatt Macy request -= ZFS_IOC_PLATFORM + 1;
325eda14cbcSMatt Macy return (zfs_ioctl_ozfs_to_legacy_platform_[request]);
326c40487d4SMatt Macy }
327eda14cbcSMatt Macy if (request >= sizeof (zfs_ioctl_ozfs_to_legacy_common_)/sizeof (long))
328eda14cbcSMatt Macy return (-1);
329eda14cbcSMatt Macy return (zfs_ioctl_ozfs_to_legacy_common_[request]);
330eda14cbcSMatt Macy }
331eda14cbcSMatt Macy
332eda14cbcSMatt Macy void
zfs_cmd_legacy_to_ozfs(zfs_cmd_legacy_t * src,zfs_cmd_t * dst)333eda14cbcSMatt Macy zfs_cmd_legacy_to_ozfs(zfs_cmd_legacy_t *src, zfs_cmd_t *dst)
334eda14cbcSMatt Macy {
335eda14cbcSMatt Macy memcpy(dst, src, offsetof(zfs_cmd_t, zc_objset_stats));
336eda14cbcSMatt Macy *&dst->zc_objset_stats = *&src->zc_objset_stats;
337eda14cbcSMatt Macy memcpy(&dst->zc_begin_record, &src->zc_begin_record,
338eda14cbcSMatt Macy offsetof(zfs_cmd_t, zc_sendobj) -
339eda14cbcSMatt Macy offsetof(zfs_cmd_t, zc_begin_record));
340eda14cbcSMatt Macy memcpy(&dst->zc_sendobj, &src->zc_sendobj,
341eda14cbcSMatt Macy sizeof (zfs_cmd_t) - 8 - offsetof(zfs_cmd_t, zc_sendobj));
342eda14cbcSMatt Macy dst->zc_zoneid = src->zc_jailid;
343eda14cbcSMatt Macy }
344eda14cbcSMatt Macy
345eda14cbcSMatt Macy void
zfs_cmd_ozfs_to_legacy(zfs_cmd_t * src,zfs_cmd_legacy_t * dst)346eda14cbcSMatt Macy zfs_cmd_ozfs_to_legacy(zfs_cmd_t *src, zfs_cmd_legacy_t *dst)
347eda14cbcSMatt Macy {
348eda14cbcSMatt Macy memcpy(dst, src, offsetof(zfs_cmd_t, zc_objset_stats));
349eda14cbcSMatt Macy *&dst->zc_objset_stats = *&src->zc_objset_stats;
350eda14cbcSMatt Macy *&dst->zc_begin_record.drr_u.drr_begin = *&src->zc_begin_record;
351eda14cbcSMatt Macy dst->zc_begin_record.drr_payloadlen = 0;
352eda14cbcSMatt Macy dst->zc_begin_record.drr_type = 0;
353eda14cbcSMatt Macy
354eda14cbcSMatt Macy memcpy(&dst->zc_inject_record, &src->zc_inject_record,
355eda14cbcSMatt Macy offsetof(zfs_cmd_t, zc_sendobj) -
356eda14cbcSMatt Macy offsetof(zfs_cmd_t, zc_inject_record));
357eda14cbcSMatt Macy dst->zc_resumable = B_FALSE;
358eda14cbcSMatt Macy memcpy(&dst->zc_sendobj, &src->zc_sendobj,
359eda14cbcSMatt Macy sizeof (zfs_cmd_t) - 8 - offsetof(zfs_cmd_t, zc_sendobj));
360eda14cbcSMatt Macy dst->zc_jailid = src->zc_zoneid;
361eda14cbcSMatt Macy }
362*dbd5678dSMartin Matuska #endif /* ZFS_LEGACY_SUPPORT */
363