author | Sanjeev Bagewadi <Sanjeev.Bagewadi@Sun.COM> |
Fri, 13 Feb 2009 11:33:56 +0530 | |
changeset 8802 | 010b31dd4c53 |
parent 8228 | 51e9ca9ee3a5 |
child 8811 | f8deccf701cf |
permissions | -rw-r--r-- |
789 | 1 |
/* |
5951
c597da46efd6
6558321 zfs_share_nfs() fails the second time through
dougm
parents:
5367
diff
changeset
|
2 |
* CDDL HEADER SART |
789 | 3 |
* |
4 |
* The contents of this file are subject to the terms of the |
|
1544 | 5 |
* Common Development and Distribution License (the "License"). |
6 |
* You may not use this file except in compliance with the License. |
|
789 | 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 |
*/ |
|
3126 | 21 |
|
789 | 22 |
/* |
8802
010b31dd4c53
6773366 "zfs list" memory consumption can be further reduced
Sanjeev Bagewadi <Sanjeev.Bagewadi@Sun.COM>
parents:
8228
diff
changeset
|
23 |
* Copyright 2009 Sun Microsystems, Inc. All rights reserved. |
789 | 24 |
* Use is subject to license terms. |
25 |
*/ |
|
26 |
||
27 |
#ifndef _LIBFS_IMPL_H |
|
28 |
#define _LIBFS_IMPL_H |
|
29 |
||
30 |
#include <sys/dmu.h> |
|
31 |
#include <sys/fs/zfs.h> |
|
32 |
#include <sys/zfs_ioctl.h> |
|
33 |
#include <sys/zfs_acl.h> |
|
4543 | 34 |
#include <sys/spa.h> |
789 | 35 |
#include <sys/nvpair.h> |
36 |
||
2082 | 37 |
#include <libuutil.h> |
789 | 38 |
#include <libzfs.h> |
4180
30b15f0bd3c9
6491973 sharemgr: zfs set sharenfs=on is slow with lots of zfs filesystems
dougm
parents:
3912
diff
changeset
|
39 |
#include <libshare.h> |
789 | 40 |
|
41 |
#ifdef __cplusplus |
|
42 |
extern "C" { |
|
43 |
#endif |
|
44 |
||
6442
b629b4fb30ca
6662212 libzfs should have a #define for VERIFY to assist backporting
gw25295
parents:
6423
diff
changeset
|
45 |
#ifdef VERIFY |
b629b4fb30ca
6662212 libzfs should have a #define for VERIFY to assist backporting
gw25295
parents:
6423
diff
changeset
|
46 |
#undef VERIFY |
b629b4fb30ca
6662212 libzfs should have a #define for VERIFY to assist backporting
gw25295
parents:
6423
diff
changeset
|
47 |
#endif |
b629b4fb30ca
6662212 libzfs should have a #define for VERIFY to assist backporting
gw25295
parents:
6423
diff
changeset
|
48 |
#define VERIFY verify |
b629b4fb30ca
6662212 libzfs should have a #define for VERIFY to assist backporting
gw25295
parents:
6423
diff
changeset
|
49 |
|
2082 | 50 |
struct libzfs_handle { |
51 |
int libzfs_error; |
|
52 |
int libzfs_fd; |
|
53 |
FILE *libzfs_mnttab; |
|
54 |
FILE *libzfs_sharetab; |
|
6865 | 55 |
zpool_handle_t *libzfs_pool_handles; |
2082 | 56 |
uu_avl_pool_t *libzfs_ns_avlpool; |
57 |
uu_avl_t *libzfs_ns_avl; |
|
58 |
uint64_t libzfs_ns_gen; |
|
59 |
int libzfs_desc_active; |
|
60 |
char libzfs_action[1024]; |
|
61 |
char libzfs_desc[1024]; |
|
4543 | 62 |
char *libzfs_log_str; |
2082 | 63 |
int libzfs_printerr; |
4180
30b15f0bd3c9
6491973 sharemgr: zfs set sharenfs=on is slow with lots of zfs filesystems
dougm
parents:
3912
diff
changeset
|
64 |
void *libzfs_sharehdl; /* libshare handle */ |
5951
c597da46efd6
6558321 zfs_share_nfs() fails the second time through
dougm
parents:
5367
diff
changeset
|
65 |
uint_t libzfs_shareflags; |
8228
51e9ca9ee3a5
6572357 libzfs should do more to avoid mnttab lookups
Eric Taylor <Eric.Taylor@Sun.COM>
parents:
7366
diff
changeset
|
66 |
avl_tree_t libzfs_mnttab_cache; |
2082 | 67 |
}; |
5951
c597da46efd6
6558321 zfs_share_nfs() fails the second time through
dougm
parents:
5367
diff
changeset
|
68 |
#define ZFSSHARE_MISS 0x01 /* Didn't find entry in cache */ |
2082 | 69 |
|
789 | 70 |
struct zfs_handle { |
2082 | 71 |
libzfs_handle_t *zfs_hdl; |
6865 | 72 |
zpool_handle_t *zpool_hdl; |
789 | 73 |
char zfs_name[ZFS_MAXNAMELEN]; |
2885 | 74 |
zfs_type_t zfs_type; /* type including snapshot */ |
75 |
zfs_type_t zfs_head_type; /* type excluding snapshot */ |
|
789 | 76 |
dmu_objset_stats_t zfs_dmustats; |
1356
e021b5e4aa0e
6377671 zfs mount -a shouldn't bother checking snapshots
eschrock
parents:
1294
diff
changeset
|
77 |
nvlist_t *zfs_props; |
2676 | 78 |
nvlist_t *zfs_user_props; |
2474
c001ad7e0c25
6368751 libzfs interface for mount/umounting all the file systems for a given pool
eschrock
parents:
2142
diff
changeset
|
79 |
boolean_t zfs_mntcheck; |
789 | 80 |
char *zfs_mntopts; |
8802
010b31dd4c53
6773366 "zfs list" memory consumption can be further reduced
Sanjeev Bagewadi <Sanjeev.Bagewadi@Sun.COM>
parents:
8228
diff
changeset
|
81 |
uint8_t *zfs_props_table; |
789 | 82 |
}; |
83 |
||
2676 | 84 |
/* |
85 |
* This is different from checking zfs_type, because it will also catch |
|
86 |
* snapshots of volumes. |
|
87 |
*/ |
|
2885 | 88 |
#define ZFS_IS_VOLUME(zhp) ((zhp)->zfs_head_type == ZFS_TYPE_VOLUME) |
2676 | 89 |
|
789 | 90 |
struct zpool_handle { |
2082 | 91 |
libzfs_handle_t *zpool_hdl; |
6865 | 92 |
zpool_handle_t *zpool_next; |
789 | 93 |
char zpool_name[ZPOOL_MAXNAMELEN]; |
94 |
int zpool_state; |
|
95 |
size_t zpool_config_size; |
|
96 |
nvlist_t *zpool_config; |
|
952
12ec54aa046e
6344502 placeholder bug for the remaining Makefile cleanup work for ZFS
eschrock
parents:
789
diff
changeset
|
97 |
nvlist_t *zpool_old_config; |
3912 | 98 |
nvlist_t *zpool_props; |
4276
c42d49ffb16f
6385547 zpool create of a mirror using a device and a slice of a device (of same size) reports an error
taylor
parents:
4180
diff
changeset
|
99 |
diskaddr_t zpool_start_block; |
789 | 100 |
}; |
101 |
||
5331 | 102 |
typedef enum { |
103 |
PROTO_NFS = 0, |
|
104 |
PROTO_SMB = 1, |
|
105 |
PROTO_END = 2 |
|
106 |
} zfs_share_proto_t; |
|
107 |
||
108 |
/* |
|
109 |
* The following can be used as a bitmask and any new values |
|
110 |
* added must preserve that capability. |
|
111 |
*/ |
|
112 |
typedef enum { |
|
113 |
SHARED_NOT_SHARED = 0x0, |
|
114 |
SHARED_ISCSI = 0x1, |
|
115 |
SHARED_NFS = 0x2, |
|
116 |
SHARED_SMB = 0x4 |
|
117 |
} zfs_share_type_t; |
|
118 |
||
3237
98d0c28f2f5e
6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents:
3126
diff
changeset
|
119 |
int zfs_error(libzfs_handle_t *, int, const char *); |
98d0c28f2f5e
6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents:
3126
diff
changeset
|
120 |
int zfs_error_fmt(libzfs_handle_t *, int, const char *, ...); |
2082 | 121 |
void zfs_error_aux(libzfs_handle_t *, const char *, ...); |
122 |
void *zfs_alloc(libzfs_handle_t *, size_t); |
|
2676 | 123 |
void *zfs_realloc(libzfs_handle_t *, void *, size_t, size_t); |
2082 | 124 |
char *zfs_strdup(libzfs_handle_t *, const char *); |
125 |
int no_memory(libzfs_handle_t *); |
|
789 | 126 |
|
3237
98d0c28f2f5e
6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents:
3126
diff
changeset
|
127 |
int zfs_standard_error(libzfs_handle_t *, int, const char *); |
98d0c28f2f5e
6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents:
3126
diff
changeset
|
128 |
int zfs_standard_error_fmt(libzfs_handle_t *, int, const char *, ...); |
98d0c28f2f5e
6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents:
3126
diff
changeset
|
129 |
int zpool_standard_error(libzfs_handle_t *, int, const char *); |
98d0c28f2f5e
6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents:
3126
diff
changeset
|
130 |
int zpool_standard_error_fmt(libzfs_handle_t *, int, const char *, ...); |
789 | 131 |
|
2474
c001ad7e0c25
6368751 libzfs interface for mount/umounting all the file systems for a given pool
eschrock
parents:
2142
diff
changeset
|
132 |
int get_dependents(libzfs_handle_t *, boolean_t, const char *, char ***, |
c001ad7e0c25
6368751 libzfs interface for mount/umounting all the file systems for a given pool
eschrock
parents:
2142
diff
changeset
|
133 |
size_t *); |
789 | 134 |
|
3912 | 135 |
|
5094 | 136 |
int zprop_parse_value(libzfs_handle_t *, nvpair_t *, int, zfs_type_t, |
137 |
nvlist_t *, char **, uint64_t *, const char *); |
|
138 |
int zprop_expand_list(libzfs_handle_t *hdl, zprop_list_t **plp, |
|
139 |
zfs_type_t type); |
|
3912 | 140 |
|
7366
33de5956afbb
6678308 zfs receive dumps core when -n is used, fails on replication stream
Tim Haley <Tim.Haley@Sun.COM>
parents:
6865
diff
changeset
|
141 |
/* |
33de5956afbb
6678308 zfs receive dumps core when -n is used, fails on replication stream
Tim Haley <Tim.Haley@Sun.COM>
parents:
6865
diff
changeset
|
142 |
* Use this changelist_gather() flag to force attempting mounts |
33de5956afbb
6678308 zfs receive dumps core when -n is used, fails on replication stream
Tim Haley <Tim.Haley@Sun.COM>
parents:
6865
diff
changeset
|
143 |
* on each change node regardless of whether or not it is currently |
33de5956afbb
6678308 zfs receive dumps core when -n is used, fails on replication stream
Tim Haley <Tim.Haley@Sun.COM>
parents:
6865
diff
changeset
|
144 |
* mounted. |
33de5956afbb
6678308 zfs receive dumps core when -n is used, fails on replication stream
Tim Haley <Tim.Haley@Sun.COM>
parents:
6865
diff
changeset
|
145 |
*/ |
33de5956afbb
6678308 zfs receive dumps core when -n is used, fails on replication stream
Tim Haley <Tim.Haley@Sun.COM>
parents:
6865
diff
changeset
|
146 |
#define CL_GATHER_MOUNT_ALWAYS 1 |
33de5956afbb
6678308 zfs receive dumps core when -n is used, fails on replication stream
Tim Haley <Tim.Haley@Sun.COM>
parents:
6865
diff
changeset
|
147 |
|
789 | 148 |
typedef struct prop_changelist prop_changelist_t; |
149 |
||
2676 | 150 |
int zcmd_alloc_dst_nvlist(libzfs_handle_t *, zfs_cmd_t *, size_t); |
5094 | 151 |
int zcmd_write_src_nvlist(libzfs_handle_t *, zfs_cmd_t *, nvlist_t *); |
152 |
int zcmd_write_conf_nvlist(libzfs_handle_t *, zfs_cmd_t *, nvlist_t *); |
|
2676 | 153 |
int zcmd_expand_dst_nvlist(libzfs_handle_t *, zfs_cmd_t *); |
154 |
int zcmd_read_dst_nvlist(libzfs_handle_t *, zfs_cmd_t *, nvlist_t **); |
|
155 |
void zcmd_free_nvlists(zfs_cmd_t *); |
|
156 |
||
789 | 157 |
int changelist_prefix(prop_changelist_t *); |
158 |
int changelist_postfix(prop_changelist_t *); |
|
159 |
void changelist_rename(prop_changelist_t *, const char *, const char *); |
|
5367 | 160 |
void changelist_remove(prop_changelist_t *, const char *); |
789 | 161 |
void changelist_free(prop_changelist_t *); |
7366
33de5956afbb
6678308 zfs receive dumps core when -n is used, fails on replication stream
Tim Haley <Tim.Haley@Sun.COM>
parents:
6865
diff
changeset
|
162 |
prop_changelist_t *changelist_gather(zfs_handle_t *, zfs_prop_t, int, int); |
5331 | 163 |
int changelist_unshare(prop_changelist_t *, zfs_share_proto_t *); |
789 | 164 |
int changelist_haszonedchild(prop_changelist_t *); |
165 |
||
166 |
void remove_mountpoint(zfs_handle_t *); |
|
5367 | 167 |
int create_parents(libzfs_handle_t *, char *, int); |
6027
68b03551f113
6609196 'zfs destroy -r' can needlessly iterate over all filesystems in pool
rm160521
parents:
5951
diff
changeset
|
168 |
boolean_t isa_child_of(const char *dataset, const char *parent); |
789 | 169 |
|
2082 | 170 |
zfs_handle_t *make_dataset_handle(libzfs_handle_t *, const char *); |
1544 | 171 |
|
2142
f6e0487aa9a3
6433264 crash when adding spare: nvlist_lookup_string(cnv, "path", &path) == 0
eschrock
parents:
2082
diff
changeset
|
172 |
int zpool_open_silent(libzfs_handle_t *, const char *, zpool_handle_t **); |
789 | 173 |
|
2082 | 174 |
int zvol_create_link(libzfs_handle_t *, const char *); |
175 |
int zvol_remove_link(libzfs_handle_t *, const char *); |
|
3126 | 176 |
int zpool_iter_zvol(zpool_handle_t *, int (*)(const char *, void *), void *); |
6423 | 177 |
boolean_t zpool_name_valid(libzfs_handle_t *, boolean_t, const char *); |
789 | 178 |
|
2082 | 179 |
void namespace_clear(libzfs_handle_t *); |
789 | 180 |
|
4180
30b15f0bd3c9
6491973 sharemgr: zfs set sharenfs=on is slow with lots of zfs filesystems
dougm
parents:
3912
diff
changeset
|
181 |
/* |
30b15f0bd3c9
6491973 sharemgr: zfs set sharenfs=on is slow with lots of zfs filesystems
dougm
parents:
3912
diff
changeset
|
182 |
* libshare (sharemgr) interfaces used internally. |
30b15f0bd3c9
6491973 sharemgr: zfs set sharenfs=on is slow with lots of zfs filesystems
dougm
parents:
3912
diff
changeset
|
183 |
*/ |
30b15f0bd3c9
6491973 sharemgr: zfs set sharenfs=on is slow with lots of zfs filesystems
dougm
parents:
3912
diff
changeset
|
184 |
|
30b15f0bd3c9
6491973 sharemgr: zfs set sharenfs=on is slow with lots of zfs filesystems
dougm
parents:
3912
diff
changeset
|
185 |
extern int zfs_init_libshare(libzfs_handle_t *, int); |
30b15f0bd3c9
6491973 sharemgr: zfs set sharenfs=on is slow with lots of zfs filesystems
dougm
parents:
3912
diff
changeset
|
186 |
extern void zfs_uninit_libshare(libzfs_handle_t *); |
5331 | 187 |
extern int zfs_parse_options(char *, zfs_share_proto_t); |
4180
30b15f0bd3c9
6491973 sharemgr: zfs set sharenfs=on is slow with lots of zfs filesystems
dougm
parents:
3912
diff
changeset
|
188 |
|
5331 | 189 |
extern int zfs_unshare_proto(zfs_handle_t *zhp, |
190 |
const char *, zfs_share_proto_t *); |
|
789 | 191 |
#ifdef __cplusplus |
192 |
} |
|
193 |
#endif |
|
194 |
||
195 |
#endif /* _LIBFS_IMPL_H */ |