xref: /illumos-gate/usr/src/uts/common/fs/zfs/sys/zfs_ioctl.h (revision ea8dc4b6d2251b437950c0056bc626b311c73c27)
1fa9e4066Sahrens /*
2fa9e4066Sahrens  * CDDL HEADER START
3fa9e4066Sahrens  *
4fa9e4066Sahrens  * The contents of this file are subject to the terms of the
5*ea8dc4b6Seschrock  * Common Development and Distribution License (the "License").
6*ea8dc4b6Seschrock  * You may not use this file except in compliance with the License.
7fa9e4066Sahrens  *
8fa9e4066Sahrens  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9fa9e4066Sahrens  * or http://www.opensolaris.org/os/licensing.
10fa9e4066Sahrens  * See the License for the specific language governing permissions
11fa9e4066Sahrens  * and limitations under the License.
12fa9e4066Sahrens  *
13fa9e4066Sahrens  * When distributing Covered Code, include this CDDL HEADER in each
14fa9e4066Sahrens  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15fa9e4066Sahrens  * If applicable, add the following below this CDDL HEADER, with the
16fa9e4066Sahrens  * fields enclosed by brackets "[]" replaced with your own identifying
17fa9e4066Sahrens  * information: Portions Copyright [yyyy] [name of copyright owner]
18fa9e4066Sahrens  *
19fa9e4066Sahrens  * CDDL HEADER END
20fa9e4066Sahrens  */
21fa9e4066Sahrens /*
226b90ca48Slling  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
23fa9e4066Sahrens  * Use is subject to license terms.
24fa9e4066Sahrens  */
25fa9e4066Sahrens 
26fa9e4066Sahrens #ifndef	_SYS_ZFS_IOCTL_H
27fa9e4066Sahrens #define	_SYS_ZFS_IOCTL_H
28fa9e4066Sahrens 
29fa9e4066Sahrens #pragma ident	"%Z%%M%	%I%	%E% SMI"
30fa9e4066Sahrens 
31fa9e4066Sahrens #include <sys/cred.h>
32fa9e4066Sahrens #include <sys/dmu.h>
33*ea8dc4b6Seschrock #include <sys/zio.h>
34fa9e4066Sahrens 
35fa9e4066Sahrens #ifdef	__cplusplus
36fa9e4066Sahrens extern "C" {
37fa9e4066Sahrens #endif
38fa9e4066Sahrens 
39fa9e4066Sahrens /*
40fa9e4066Sahrens  * Property values for snapdir
41fa9e4066Sahrens  */
42a0965f35Sbonwick #define	ZFS_SNAPDIR_HIDDEN		0
43a0965f35Sbonwick #define	ZFS_SNAPDIR_VISIBLE		1
44fa9e4066Sahrens 
45fa9e4066Sahrens #define	DMU_BACKUP_VERSION (1ULL)
46fa9e4066Sahrens #define	DMU_BACKUP_MAGIC 0x2F5bacbacULL
47fa9e4066Sahrens 
48fa9e4066Sahrens /*
49fa9e4066Sahrens  * zfs ioctl command structure
50fa9e4066Sahrens  */
51fa9e4066Sahrens typedef struct dmu_replay_record {
52fa9e4066Sahrens 	enum {
53fa9e4066Sahrens 		DRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS,
54fa9e4066Sahrens 		DRR_WRITE, DRR_FREE, DRR_END,
55fa9e4066Sahrens 	} drr_type;
56fa9e4066Sahrens 	uint32_t drr_pad;
57fa9e4066Sahrens 	union {
58fa9e4066Sahrens 		struct drr_begin {
59fa9e4066Sahrens 			uint64_t drr_magic;
60fa9e4066Sahrens 			uint64_t drr_version;
61fa9e4066Sahrens 			uint64_t drr_creation_time;
62fa9e4066Sahrens 			dmu_objset_type_t drr_type;
63fa9e4066Sahrens 			uint32_t drr_pad;
64fa9e4066Sahrens 			uint64_t drr_toguid;
65fa9e4066Sahrens 			uint64_t drr_fromguid;
66fa9e4066Sahrens 			char drr_toname[MAXNAMELEN];
67fa9e4066Sahrens 		} drr_begin;
68fa9e4066Sahrens 		struct drr_end {
69*ea8dc4b6Seschrock 			zio_cksum_t drr_checksum;
70fa9e4066Sahrens 		} drr_end;
71fa9e4066Sahrens 		struct drr_object {
72fa9e4066Sahrens 			uint64_t drr_object;
73fa9e4066Sahrens 			dmu_object_type_t drr_type;
74fa9e4066Sahrens 			dmu_object_type_t drr_bonustype;
75fa9e4066Sahrens 			uint32_t drr_blksz;
76fa9e4066Sahrens 			uint32_t drr_bonuslen;
77fa9e4066Sahrens 			uint8_t drr_checksum;
78fa9e4066Sahrens 			uint8_t drr_compress;
79fa9e4066Sahrens 			uint8_t drr_pad[6];
80fa9e4066Sahrens 		} drr_object;
81fa9e4066Sahrens 		struct drr_freeobjects {
82fa9e4066Sahrens 			uint64_t drr_firstobj;
83fa9e4066Sahrens 			uint64_t drr_numobjs;
84fa9e4066Sahrens 		} drr_freeobjects;
85fa9e4066Sahrens 		struct drr_write {
86fa9e4066Sahrens 			uint64_t drr_object;
87fa9e4066Sahrens 			dmu_object_type_t drr_type;
88fa9e4066Sahrens 			uint32_t drr_pad;
89fa9e4066Sahrens 			uint64_t drr_offset;
90fa9e4066Sahrens 			uint64_t drr_length;
91fa9e4066Sahrens 		} drr_write;
92fa9e4066Sahrens 		struct drr_free {
93fa9e4066Sahrens 			uint64_t drr_object;
94fa9e4066Sahrens 			uint64_t drr_offset;
95fa9e4066Sahrens 			uint64_t drr_length;
96fa9e4066Sahrens 		} drr_free;
97fa9e4066Sahrens 	} drr_u;
98fa9e4066Sahrens } dmu_replay_record_t;
99fa9e4066Sahrens 
100*ea8dc4b6Seschrock typedef struct zinject_record {
101*ea8dc4b6Seschrock 	uint64_t	zi_objset;
102*ea8dc4b6Seschrock 	uint64_t	zi_object;
103*ea8dc4b6Seschrock 	uint64_t	zi_start;
104*ea8dc4b6Seschrock 	uint64_t	zi_end;
105*ea8dc4b6Seschrock 	uint64_t	zi_guid;
106*ea8dc4b6Seschrock 	uint32_t	zi_level;
107*ea8dc4b6Seschrock 	uint32_t	zi_error;
108*ea8dc4b6Seschrock 	uint64_t	zi_type;
109*ea8dc4b6Seschrock 	uint32_t	zi_freq;
110*ea8dc4b6Seschrock } zinject_record_t;
111*ea8dc4b6Seschrock 
112*ea8dc4b6Seschrock #define	ZINJECT_NULL		0x1
113*ea8dc4b6Seschrock #define	ZINJECT_FLUSH_ARC	0x2
114*ea8dc4b6Seschrock #define	ZINJECT_UNLOAD_SPA	0x4
115*ea8dc4b6Seschrock 
116fa9e4066Sahrens typedef struct zfs_cmd {
117fa9e4066Sahrens 	char		zc_name[MAXNAMELEN];
118fa9e4066Sahrens 	char		zc_prop_name[MAXNAMELEN];
119fa9e4066Sahrens 	char		zc_prop_value[MAXPATHLEN];
120fa9e4066Sahrens 	char		zc_root[MAXPATHLEN];
121*ea8dc4b6Seschrock 	char		zc_filename[MAXNAMELEN];
122fa9e4066Sahrens 	uint32_t	zc_intsz;
123fa9e4066Sahrens 	uint32_t	zc_numints;
124*ea8dc4b6Seschrock 	uint64_t	zc_guid;
125fa9e4066Sahrens 	uint64_t	zc_config_src;	/* really (char *) */
126fa9e4066Sahrens 	uint64_t	zc_config_src_size;
127fa9e4066Sahrens 	uint64_t	zc_config_dst;	/* really (char *) */
128fa9e4066Sahrens 	uint64_t	zc_config_dst_size;
129fa9e4066Sahrens 	uint64_t	zc_cookie;
130fa9e4066Sahrens 	uint64_t	zc_cred;
131fa9e4066Sahrens 	uint64_t	zc_dev;
132fa9e4066Sahrens 	uint64_t	zc_volsize;
133fa9e4066Sahrens 	uint64_t	zc_volblocksize;
134fa9e4066Sahrens 	uint64_t	zc_objset_type;
135fa9e4066Sahrens 	dmu_objset_stats_t zc_objset_stats;
136fa9e4066Sahrens 	struct drr_begin zc_begin_record;
137*ea8dc4b6Seschrock 	zinject_record_t zc_inject_record;
138*ea8dc4b6Seschrock 	zbookmark_t	zc_bookmark;
139fa9e4066Sahrens } zfs_cmd_t;
140fa9e4066Sahrens 
141a0965f35Sbonwick #define	ZVOL_MAX_MINOR	(1 << 16)
142a0965f35Sbonwick #define	ZFS_MIN_MINOR	(ZVOL_MAX_MINOR + 1)
143a0965f35Sbonwick 
144fa9e4066Sahrens #ifdef _KERNEL
145fa9e4066Sahrens 
146fa9e4066Sahrens extern dev_info_t *zfs_dip;
147fa9e4066Sahrens 
148fa9e4066Sahrens extern int zfs_secpolicy_write(const char *dataset, const char *, cred_t *cr);
149fa9e4066Sahrens extern int zfs_busy(void);
150fa9e4066Sahrens 
1515c5460e9Seschrock extern int zvol_check_volsize(zfs_cmd_t *zc, uint64_t blocksize);
152fa9e4066Sahrens extern int zvol_check_volblocksize(zfs_cmd_t *zc);
153fa9e4066Sahrens extern int zvol_get_stats(zfs_cmd_t *zc, objset_t *os);
154fa9e4066Sahrens extern void zvol_create_cb(objset_t *os, void *arg, dmu_tx_t *tx);
155fa9e4066Sahrens extern int zvol_create_minor(zfs_cmd_t *zc);
156fa9e4066Sahrens extern int zvol_remove_minor(zfs_cmd_t *zc);
157fa9e4066Sahrens extern int zvol_set_volsize(zfs_cmd_t *zc);
158fa9e4066Sahrens extern int zvol_set_volblocksize(zfs_cmd_t *zc);
159fa9e4066Sahrens extern int zvol_open(dev_t *devp, int flag, int otyp, cred_t *cr);
160fa9e4066Sahrens extern int zvol_close(dev_t dev, int flag, int otyp, cred_t *cr);
161fa9e4066Sahrens extern int zvol_strategy(buf_t *bp);
162fa9e4066Sahrens extern int zvol_read(dev_t dev, uio_t *uiop, cred_t *cr);
163fa9e4066Sahrens extern int zvol_write(dev_t dev, uio_t *uiop, cred_t *cr);
164fa9e4066Sahrens extern int zvol_aread(dev_t dev, struct aio_req *aio, cred_t *cr);
165fa9e4066Sahrens extern int zvol_awrite(dev_t dev, struct aio_req *aio, cred_t *cr);
166fa9e4066Sahrens extern int zvol_ioctl(dev_t dev, int cmd, intptr_t arg, int flag, cred_t *cr,
167fa9e4066Sahrens     int *rvalp);
168fa9e4066Sahrens extern int zvol_busy(void);
169fa9e4066Sahrens extern void zvol_init(void);
170fa9e4066Sahrens extern void zvol_fini(void);
171fa9e4066Sahrens 
172fa9e4066Sahrens #endif	/* _KERNEL */
173fa9e4066Sahrens 
174fa9e4066Sahrens #ifdef	__cplusplus
175fa9e4066Sahrens }
176fa9e4066Sahrens #endif
177fa9e4066Sahrens 
178fa9e4066Sahrens #endif	/* _SYS_ZFS_IOCTL_H */
179