author | Jeff Bonwick <Jeff.Bonwick@Sun.COM> |
Sun, 01 Nov 2009 14:14:46 -0800 | |
changeset 10922 | e2081f502306 |
parent 10373 | bcf97ee54990 |
child 11209 | 462283cb4096 |
permissions | -rw-r--r-- |
789 | 1 |
/* |
2 |
* CDDL HEADER START |
|
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 |
*/ |
|
21 |
/* |
|
9355
09928982c591
6818183 zfs snapshot -r is slow due to set_snap_props() doing txg_wait_synced() for each new snapshot
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8415
diff
changeset
|
22 |
* Copyright 2009 Sun Microsystems, Inc. All rights reserved. |
789 | 23 |
* Use is subject to license terms. |
24 |
*/ |
|
25 |
||
26 |
#ifndef _SYS_DMU_OBJSET_H |
|
27 |
#define _SYS_DMU_OBJSET_H |
|
28 |
||
29 |
#include <sys/spa.h> |
|
3547
e396e0a440b1
6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents:
2885
diff
changeset
|
30 |
#include <sys/arc.h> |
789 | 31 |
#include <sys/txg.h> |
32 |
#include <sys/zfs_context.h> |
|
33 |
#include <sys/dnode.h> |
|
34 |
#include <sys/zio.h> |
|
35 |
#include <sys/zil.h> |
|
36 |
||
37 |
#ifdef __cplusplus |
|
38 |
extern "C" { |
|
39 |
#endif |
|
40 |
||
41 |
struct dsl_dataset; |
|
42 |
struct dmu_tx; |
|
43 |
||
9396
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
44 |
#define OBJSET_PHYS_SIZE 2048 |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
45 |
#define OBJSET_OLD_PHYS_SIZE 1024 |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
46 |
|
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
47 |
#define OBJSET_FLAG_USERACCOUNTING_COMPLETE (1ULL<<0) |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
48 |
|
789 | 49 |
typedef struct objset_phys { |
50 |
dnode_phys_t os_meta_dnode; |
|
51 |
zil_header_t os_zil_header; |
|
52 |
uint64_t os_type; |
|
9396
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
53 |
uint64_t os_flags; |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
54 |
char os_pad[OBJSET_PHYS_SIZE - sizeof (dnode_phys_t)*3 - |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
55 |
sizeof (zil_header_t) - sizeof (uint64_t)*2]; |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
56 |
dnode_phys_t os_userused_dnode; |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
57 |
dnode_phys_t os_groupused_dnode; |
789 | 58 |
} objset_phys_t; |
59 |
||
60 |
struct objset { |
|
61 |
/* Immutable: */ |
|
62 |
struct dsl_dataset *os_dsl_dataset; |
|
63 |
spa_t *os_spa; |
|
3547
e396e0a440b1
6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents:
2885
diff
changeset
|
64 |
arc_buf_t *os_phys_buf; |
789 | 65 |
objset_phys_t *os_phys; |
66 |
dnode_t *os_meta_dnode; |
|
9396
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
67 |
dnode_t *os_userused_dnode; |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
68 |
dnode_t *os_groupused_dnode; |
789 | 69 |
zilog_t *os_zil; |
10922
e2081f502306
PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents:
10373
diff
changeset
|
70 |
|
e2081f502306
PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents:
10373
diff
changeset
|
71 |
/* can change, under dsl_dir's locks: */ |
e2081f502306
PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents:
10373
diff
changeset
|
72 |
uint8_t os_checksum; |
e2081f502306
PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents:
10373
diff
changeset
|
73 |
uint8_t os_compress; |
e2081f502306
PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents:
10373
diff
changeset
|
74 |
uint8_t os_copies; |
e2081f502306
PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents:
10373
diff
changeset
|
75 |
uint8_t os_dedup_checksum; |
e2081f502306
PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents:
10373
diff
changeset
|
76 |
uint8_t os_dedup_verify; |
e2081f502306
PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents:
10373
diff
changeset
|
77 |
uint8_t os_logbias; |
e2081f502306
PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents:
10373
diff
changeset
|
78 |
uint8_t os_primary_cache; |
e2081f502306
PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents:
10373
diff
changeset
|
79 |
uint8_t os_secondary_cache; |
789 | 80 |
|
81 |
/* no lock needed: */ |
|
82 |
struct dmu_tx *os_synctx; /* XXX sketchy */ |
|
3547
e396e0a440b1
6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents:
2885
diff
changeset
|
83 |
blkptr_t *os_rootbp; |
7046
361307ae060d
6343667 scrub/resilver has to start over when a snapshot is taken
ahrens
parents:
6492
diff
changeset
|
84 |
zil_header_t os_zil_header; |
9396
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
85 |
list_t os_synced_dnodes; |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
86 |
uint64_t os_flags; |
789 | 87 |
|
88 |
/* Protected by os_obj_lock */ |
|
89 |
kmutex_t os_obj_lock; |
|
90 |
uint64_t os_obj_next; |
|
91 |
||
92 |
/* Protected by os_lock */ |
|
93 |
kmutex_t os_lock; |
|
94 |
list_t os_dirty_dnodes[TXG_SIZE]; |
|
95 |
list_t os_free_dnodes[TXG_SIZE]; |
|
96 |
list_t os_dnodes; |
|
97 |
list_t os_downgraded_dbufs; |
|
5326
6752aa2bd5bc
6425096 want online 'zfs recv' (read only and read/write)
ek110237
parents:
4944
diff
changeset
|
98 |
|
6752aa2bd5bc
6425096 want online 'zfs recv' (read only and read/write)
ek110237
parents:
4944
diff
changeset
|
99 |
/* stuff we store for the user */ |
6752aa2bd5bc
6425096 want online 'zfs recv' (read only and read/write)
ek110237
parents:
4944
diff
changeset
|
100 |
kmutex_t os_user_ptr_lock; |
6752aa2bd5bc
6425096 want online 'zfs recv' (read only and read/write)
ek110237
parents:
4944
diff
changeset
|
101 |
void *os_user_ptr; |
10298
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
102 |
}; |
789 | 103 |
|
10922
e2081f502306
PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents:
10373
diff
changeset
|
104 |
#define DMU_META_OBJSET 0 |
1544 | 105 |
#define DMU_META_DNODE_OBJECT 0 |
9396
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
106 |
#define DMU_OBJECT_IS_SPECIAL(obj) ((int64_t)(obj) <= 0) |
789 | 107 |
|
7237
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
7046
diff
changeset
|
108 |
#define DMU_OS_IS_L2CACHEABLE(os) \ |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
7046
diff
changeset
|
109 |
((os)->os_secondary_cache == ZFS_CACHE_ALL || \ |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
7046
diff
changeset
|
110 |
(os)->os_secondary_cache == ZFS_CACHE_METADATA) |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
7046
diff
changeset
|
111 |
|
789 | 112 |
/* called from zpl */ |
10298
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
113 |
int dmu_objset_hold(const char *name, void *tag, objset_t **osp); |
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
114 |
int dmu_objset_own(const char *name, dmu_objset_type_t type, |
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
115 |
boolean_t readonly, void *tag, objset_t **osp); |
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
116 |
void dmu_objset_rele(objset_t *os, void *tag); |
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
117 |
void dmu_objset_disown(objset_t *os, void *tag); |
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
118 |
int dmu_objset_from_ds(struct dsl_dataset *ds, objset_t **osp); |
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
119 |
|
10272
a0669934e974
6861581 ZFS frees in synching context during rollback
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10242
diff
changeset
|
120 |
int dmu_objset_create(const char *name, dmu_objset_type_t type, uint64_t flags, |
4543 | 121 |
void (*func)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx), void *arg); |
10272
a0669934e974
6861581 ZFS frees in synching context during rollback
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10242
diff
changeset
|
122 |
int dmu_objset_clone(const char *name, struct dsl_dataset *clone_origin, |
a0669934e974
6861581 ZFS frees in synching context during rollback
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10242
diff
changeset
|
123 |
uint64_t flags); |
10242
c40d075fbca6
PSARC/2009/297 zfs snapshot holds
Chris Kirby <chris.kirby@sun.com>
parents:
9396
diff
changeset
|
124 |
int dmu_objset_destroy(const char *name, boolean_t defer); |
9355
09928982c591
6818183 zfs snapshot -r is slow due to set_snap_props() doing txg_wait_synced() for each new snapshot
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8415
diff
changeset
|
125 |
int dmu_objset_snapshot(char *fsname, char *snapname, nvlist_t *props, |
09928982c591
6818183 zfs snapshot -r is slow due to set_snap_props() doing txg_wait_synced() for each new snapshot
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8415
diff
changeset
|
126 |
boolean_t recursive); |
2885 | 127 |
void dmu_objset_stats(objset_t *os, nvlist_t *nv); |
128 |
void dmu_objset_fast_stat(objset_t *os, dmu_objset_stats_t *stat); |
|
129 |
void dmu_objset_space(objset_t *os, uint64_t *refdbytesp, uint64_t *availbytesp, |
|
130 |
uint64_t *usedobjsp, uint64_t *availobjsp); |
|
131 |
uint64_t dmu_objset_fsid_guid(objset_t *os); |
|
2199 | 132 |
int dmu_objset_find(char *name, int func(char *, void *), void *arg, |
789 | 133 |
int flags); |
7046
361307ae060d
6343667 scrub/resilver has to start over when a snapshot is taken
ahrens
parents:
6492
diff
changeset
|
134 |
int dmu_objset_find_spa(spa_t *spa, const char *name, |
361307ae060d
6343667 scrub/resilver has to start over when a snapshot is taken
ahrens
parents:
6492
diff
changeset
|
135 |
int func(spa_t *, uint64_t, const char *, void *), void *arg, int flags); |
8415
d5525cd1cbc2
6386929 initial "zfs list" is slow
Rich Morris <Richard.Morris@Sun.COM>
parents:
8213
diff
changeset
|
136 |
int dmu_objset_prefetch(char *name, void *arg); |
789 | 137 |
void dmu_objset_byteswap(void *buf, size_t size); |
4944
96d96f8de974
6569719 panic dangling dbufs (dn=ffffffff28814d30, dbuf=ffffffff20756008)
maybee
parents:
4787
diff
changeset
|
138 |
int dmu_objset_evict_dbufs(objset_t *os); |
10373
bcf97ee54990
6395956 snapshot dir needs real c/mtime
Chris Kirby <chris.kirby@sun.com>
parents:
10310
diff
changeset
|
139 |
timestruc_t dmu_objset_snap_cmtime(objset_t *os); |
789 | 140 |
|
141 |
/* called from dsl */ |
|
10298
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
142 |
void dmu_objset_sync(objset_t *os, zio_t *zio, dmu_tx_t *tx); |
10922
e2081f502306
PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents:
10373
diff
changeset
|
143 |
boolean_t dmu_objset_is_dirty(objset_t *os, uint64_t txg); |
10298
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
144 |
objset_t *dmu_objset_create_impl(spa_t *spa, struct dsl_dataset *ds, |
3547
e396e0a440b1
6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents:
2885
diff
changeset
|
145 |
blkptr_t *bp, dmu_objset_type_t type, dmu_tx_t *tx); |
1544 | 146 |
int dmu_objset_open_impl(spa_t *spa, struct dsl_dataset *ds, blkptr_t *bp, |
10298
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
147 |
objset_t **osp); |
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
148 |
void dmu_objset_evict(objset_t *os); |
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
149 |
void dmu_objset_do_userquota_callbacks(objset_t *os, dmu_tx_t *tx); |
a0d52501437c
6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
10272
diff
changeset
|
150 |
boolean_t dmu_objset_userused_enabled(objset_t *os); |
9396
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
151 |
int dmu_objset_userspace_upgrade(objset_t *os); |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
9355
diff
changeset
|
152 |
boolean_t dmu_objset_userspace_present(objset_t *os); |
789 | 153 |
|
154 |
#ifdef __cplusplus |
|
155 |
} |
|
156 |
#endif |
|
157 |
||
158 |
#endif /* _SYS_DMU_OBJSET_H */ |