]> CyberLeo.Net >> Repos - FreeBSD/releng/7.2.git/blob - sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h
Create releng/7.2 from stable/7 in preparation for 7.2-RELEASE.
[FreeBSD/releng/7.2.git] / sys / cddl / contrib / opensolaris / uts / common / fs / zfs / sys / zfs_ioctl.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 2007 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25
26 #ifndef _SYS_ZFS_IOCTL_H
27 #define _SYS_ZFS_IOCTL_H
28
29 #pragma ident   "%Z%%M% %I%     %E% SMI"
30
31 #include <sys/cred.h>
32 #include <sys/dmu.h>
33 #include <sys/zio.h>
34
35 #ifdef  __cplusplus
36 extern "C" {
37 #endif
38
39 /*
40  * Property values for snapdir
41  */
42 #define ZFS_SNAPDIR_HIDDEN              0
43 #define ZFS_SNAPDIR_VISIBLE             1
44
45 #define DMU_BACKUP_VERSION (1ULL)
46 #define DMU_BACKUP_MAGIC 0x2F5bacbacULL
47
48 /*
49  * zfs ioctl command structure
50  */
51 typedef struct dmu_replay_record {
52         enum {
53                 DRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS,
54                 DRR_WRITE, DRR_FREE, DRR_END,
55         } drr_type;
56         uint32_t drr_pad;
57         union {
58                 struct drr_begin {
59                         uint64_t drr_magic;
60                         uint64_t drr_version;
61                         uint64_t drr_creation_time;
62                         dmu_objset_type_t drr_type;
63                         uint32_t drr_pad;
64                         uint64_t drr_toguid;
65                         uint64_t drr_fromguid;
66                         char drr_toname[MAXNAMELEN];
67                 } drr_begin;
68                 struct drr_end {
69                         zio_cksum_t drr_checksum;
70                 } drr_end;
71                 struct drr_object {
72                         uint64_t drr_object;
73                         dmu_object_type_t drr_type;
74                         dmu_object_type_t drr_bonustype;
75                         uint32_t drr_blksz;
76                         uint32_t drr_bonuslen;
77                         uint8_t drr_checksum;
78                         uint8_t drr_compress;
79                         uint8_t drr_pad[6];
80                         /* bonus content follows */
81                 } drr_object;
82                 struct drr_freeobjects {
83                         uint64_t drr_firstobj;
84                         uint64_t drr_numobjs;
85                 } drr_freeobjects;
86                 struct drr_write {
87                         uint64_t drr_object;
88                         dmu_object_type_t drr_type;
89                         uint32_t drr_pad;
90                         uint64_t drr_offset;
91                         uint64_t drr_length;
92                         /* content follows */
93                 } drr_write;
94                 struct drr_free {
95                         uint64_t drr_object;
96                         uint64_t drr_offset;
97                         uint64_t drr_length;
98                 } drr_free;
99         } drr_u;
100 } dmu_replay_record_t;
101
102 typedef struct zinject_record {
103         uint64_t        zi_objset;
104         uint64_t        zi_object;
105         uint64_t        zi_start;
106         uint64_t        zi_end;
107         uint64_t        zi_guid;
108         uint32_t        zi_level;
109         uint32_t        zi_error;
110         uint64_t        zi_type;
111         uint32_t        zi_freq;
112 } zinject_record_t;
113
114 #define ZINJECT_NULL            0x1
115 #define ZINJECT_FLUSH_ARC       0x2
116 #define ZINJECT_UNLOAD_SPA      0x4
117
118 typedef struct zfs_cmd {
119         char            zc_name[MAXPATHLEN];
120         char            zc_value[MAXPATHLEN * 2];
121         uint64_t        zc_guid;
122         uint64_t        zc_nvlist_src;  /* really (char *) */
123         uint64_t        zc_nvlist_src_size;
124         uint64_t        zc_nvlist_dst;  /* really (char *) */
125         uint64_t        zc_nvlist_dst_size;
126         uint64_t        zc_cookie;
127         uint64_t        zc_cred;
128         uint64_t        zc_dev;
129         uint64_t        zc_objset_type;
130         uint64_t        zc_history;     /* really (char *) */
131         uint64_t        zc_history_len;
132         uint64_t        zc_history_offset;
133         uint64_t        zc_obj;
134         uint64_t        zc_jailid;
135         dmu_objset_stats_t zc_objset_stats;
136         struct drr_begin zc_begin_record;
137         zinject_record_t zc_inject_record;
138 } zfs_cmd_t;
139
140 #ifdef _KERNEL
141 typedef struct zfs_create_data {
142         cred_t          *zc_cred;
143         dev_t           zc_dev;
144         nvlist_t        *zc_props;
145 } zfs_create_data_t;
146 #endif
147
148 #define ZVOL_MAX_MINOR  (1 << 16)
149 #define ZFS_MIN_MINOR   (ZVOL_MAX_MINOR + 1)
150
151 #ifdef _KERNEL
152
153 extern int zfs_secpolicy_write(const char *dataset, cred_t *cr);
154 extern int zfs_busy(void);
155 extern int zfs_unmount_snap(char *, void *);
156
157 #endif  /* _KERNEL */
158
159 #ifdef  __cplusplus
160 }
161 #endif
162
163 #endif  /* _SYS_ZFS_IOCTL_H */