author | marks |
Tue, 26 Jun 2007 07:44:24 -0700 | |
changeset 4543 | 12bb2876a62e |
parent 3835 | 063f0749804a |
child 4787 | 602d3f97842c |
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 |
/* |
|
3547
e396e0a440b1
6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents:
2885
diff
changeset
|
22 |
* Copyright 2007 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 |
#pragma ident "%Z%%M% %I% %E% SMI" |
|
30 |
||
31 |
#include <sys/spa.h> |
|
3547
e396e0a440b1
6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents:
2885
diff
changeset
|
32 |
#include <sys/arc.h> |
789 | 33 |
#include <sys/txg.h> |
34 |
#include <sys/zfs_context.h> |
|
35 |
#include <sys/dnode.h> |
|
36 |
#include <sys/zio.h> |
|
37 |
#include <sys/zil.h> |
|
38 |
||
39 |
#ifdef __cplusplus |
|
40 |
extern "C" { |
|
41 |
#endif |
|
42 |
||
43 |
struct dsl_dataset; |
|
44 |
struct dmu_tx; |
|
45 |
struct objset_impl; |
|
46 |
||
47 |
typedef struct objset_phys { |
|
48 |
dnode_phys_t os_meta_dnode; |
|
49 |
zil_header_t os_zil_header; |
|
50 |
uint64_t os_type; |
|
51 |
char os_pad[1024 - sizeof (dnode_phys_t) - sizeof (zil_header_t) - |
|
52 |
sizeof (uint64_t)]; |
|
53 |
} objset_phys_t; |
|
54 |
||
55 |
struct objset { |
|
56 |
struct objset_impl *os; |
|
57 |
int os_mode; |
|
58 |
}; |
|
59 |
||
60 |
typedef struct objset_impl { |
|
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; |
|
67 |
zilog_t *os_zil; |
|
68 |
objset_t os; |
|
69 |
uint8_t os_checksum; /* can change, under dsl_dir's locks */ |
|
70 |
uint8_t os_compress; /* can change, under dsl_dir's locks */ |
|
3835 | 71 |
uint8_t os_copies; /* can change, under dsl_dir's locks */ |
789 | 72 |
uint8_t os_md_checksum; |
73 |
uint8_t os_md_compress; |
|
74 |
||
75 |
/* no lock needed: */ |
|
76 |
struct dmu_tx *os_synctx; /* XXX sketchy */ |
|
3547
e396e0a440b1
6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents:
2885
diff
changeset
|
77 |
blkptr_t *os_rootbp; |
789 | 78 |
|
79 |
/* Protected by os_obj_lock */ |
|
80 |
kmutex_t os_obj_lock; |
|
81 |
uint64_t os_obj_next; |
|
82 |
||
83 |
/* Protected by os_lock */ |
|
84 |
kmutex_t os_lock; |
|
85 |
list_t os_dirty_dnodes[TXG_SIZE]; |
|
86 |
list_t os_free_dnodes[TXG_SIZE]; |
|
87 |
list_t os_dnodes; |
|
88 |
list_t os_downgraded_dbufs; |
|
89 |
} objset_impl_t; |
|
90 |
||
1544 | 91 |
#define DMU_META_DNODE_OBJECT 0 |
789 | 92 |
|
93 |
/* called from zpl */ |
|
94 |
int dmu_objset_open(const char *name, dmu_objset_type_t type, int mode, |
|
95 |
objset_t **osp); |
|
96 |
void dmu_objset_close(objset_t *os); |
|
97 |
int dmu_objset_create(const char *name, dmu_objset_type_t type, |
|
98 |
objset_t *clone_parent, |
|
4543 | 99 |
void (*func)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx), void *arg); |
789 | 100 |
int dmu_objset_destroy(const char *name); |
101 |
int dmu_objset_rollback(const char *name); |
|
2199 | 102 |
int dmu_objset_snapshot(char *fsname, char *snapname, boolean_t recursive); |
2885 | 103 |
void dmu_objset_stats(objset_t *os, nvlist_t *nv); |
104 |
void dmu_objset_fast_stat(objset_t *os, dmu_objset_stats_t *stat); |
|
105 |
void dmu_objset_space(objset_t *os, uint64_t *refdbytesp, uint64_t *availbytesp, |
|
106 |
uint64_t *usedobjsp, uint64_t *availobjsp); |
|
107 |
uint64_t dmu_objset_fsid_guid(objset_t *os); |
|
2199 | 108 |
int dmu_objset_find(char *name, int func(char *, void *), void *arg, |
789 | 109 |
int flags); |
110 |
void dmu_objset_byteswap(void *buf, size_t size); |
|
1646
b4e43ae19fff
6393443 Remove remaining txg_wait_synced() from zfs unmount path.
perrin
parents:
1544
diff
changeset
|
111 |
int dmu_objset_evict_dbufs(objset_t *os, int try); |
789 | 112 |
|
113 |
/* called from dsl */ |
|
3547
e396e0a440b1
6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents:
2885
diff
changeset
|
114 |
void dmu_objset_sync(objset_impl_t *os, zio_t *zio, dmu_tx_t *tx); |
789 | 115 |
objset_impl_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
|
116 |
blkptr_t *bp, dmu_objset_type_t type, dmu_tx_t *tx); |
1544 | 117 |
int dmu_objset_open_impl(spa_t *spa, struct dsl_dataset *ds, blkptr_t *bp, |
118 |
objset_impl_t **osip); |
|
789 | 119 |
void dmu_objset_evict(struct dsl_dataset *ds, void *arg); |
120 |
||
121 |
#ifdef __cplusplus |
|
122 |
} |
|
123 |
#endif |
|
124 |
||
125 |
#endif /* _SYS_DMU_OBJSET_H */ |