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