]>
Commit | Line | Data |
---|---|---|
34dc7c2f BB |
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 2008 Sun Microsystems, Inc. All rights reserved. | |
23 | * Use is subject to license terms. | |
24 | */ | |
25 | ||
26 | #ifndef _SYS_DSL_POOL_H | |
27 | #define _SYS_DSL_POOL_H | |
28 | ||
29 | #pragma ident "@(#)dsl_pool.h 1.5 08/03/20 SMI" | |
30 | ||
31 | #include <sys/spa.h> | |
32 | #include <sys/txg.h> | |
33 | #include <sys/txg_impl.h> | |
34 | #include <sys/zfs_context.h> | |
35 | ||
36 | #ifdef __cplusplus | |
37 | extern "C" { | |
38 | #endif | |
39 | ||
40 | struct objset; | |
41 | struct dsl_dir; | |
42 | ||
43 | typedef struct dsl_pool { | |
44 | /* Immutable */ | |
45 | spa_t *dp_spa; | |
46 | struct objset *dp_meta_objset; | |
47 | struct dsl_dir *dp_root_dir; | |
48 | struct dsl_dir *dp_mos_dir; | |
49 | uint64_t dp_root_dir_obj; | |
50 | ||
51 | /* No lock needed - sync context only */ | |
52 | blkptr_t dp_meta_rootbp; | |
53 | list_t dp_synced_datasets; | |
54 | uint64_t dp_write_limit; | |
55 | ||
56 | /* Uses dp_lock */ | |
57 | kmutex_t dp_lock; | |
58 | uint64_t dp_space_towrite[TXG_SIZE]; | |
59 | uint64_t dp_tempreserved[TXG_SIZE]; | |
60 | ||
61 | /* Has its own locking */ | |
62 | tx_state_t dp_tx; | |
63 | txg_list_t dp_dirty_datasets; | |
64 | txg_list_t dp_dirty_dirs; | |
65 | txg_list_t dp_sync_tasks; | |
66 | ||
67 | /* | |
68 | * Protects administrative changes (properties, namespace) | |
69 | * It is only held for write in syncing context. Therefore | |
70 | * syncing context does not need to ever have it for read, since | |
71 | * nobody else could possibly have it for write. | |
72 | */ | |
73 | krwlock_t dp_config_rwlock; | |
74 | } dsl_pool_t; | |
75 | ||
76 | int dsl_pool_open(spa_t *spa, uint64_t txg, dsl_pool_t **dpp); | |
77 | void dsl_pool_close(dsl_pool_t *dp); | |
78 | dsl_pool_t *dsl_pool_create(spa_t *spa, uint64_t txg); | |
79 | void dsl_pool_sync(dsl_pool_t *dp, uint64_t txg); | |
80 | void dsl_pool_zil_clean(dsl_pool_t *dp); | |
81 | int dsl_pool_sync_context(dsl_pool_t *dp); | |
82 | uint64_t dsl_pool_adjustedsize(dsl_pool_t *dp, boolean_t netfree); | |
83 | int dsl_pool_tempreserve_space(dsl_pool_t *dp, uint64_t space, dmu_tx_t *tx); | |
84 | void dsl_pool_tempreserve_clear(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx); | |
85 | void dsl_pool_memory_pressure(dsl_pool_t *dp); | |
86 | void dsl_pool_willuse_space(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx); | |
87 | ||
88 | #ifdef __cplusplus | |
89 | } | |
90 | #endif | |
91 | ||
92 | #endif /* _SYS_DSL_POOL_H */ |