Print this page
NEX-5795 Rename 'wrc' as 'wbc' in the source and in the tech docs
Reviewed by: Alex Aizman <alex.aizman@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Alek Pinchuk <alek.pinchuk@nexenta.com>
re #12585 rb4049 ZFS++ work port - refactoring to improve separation of open/closed code, bug fixes, performance improvements - open code
Bug 11205: add missing libzfs_closed_stubs.c to fix opensource-only build.
ZFS plus work: special vdevs, cos, cos/vdev properties
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/uts/common/fs/zfs/sys/dmu_tx.h
+++ new/usr/src/uts/common/fs/zfs/sys/dmu_tx.h
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
|
↓ open down ↓ |
13 lines elided |
↑ open up ↑ |
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21 /*
22 22 * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
23 23 * Use is subject to license terms.
24 + * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
24 25 */
25 26 /*
26 27 * Copyright (c) 2012, 2016 by Delphix. All rights reserved.
27 28 */
28 29
29 30 #ifndef _SYS_DMU_TX_H
30 31 #define _SYS_DMU_TX_H
31 32
32 33 #include <sys/inttypes.h>
33 34 #include <sys/dmu.h>
34 35 #include <sys/txg.h>
35 36 #include <sys/refcount.h>
36 37
37 38 #ifdef __cplusplus
38 39 extern "C" {
39 40 #endif
40 41
41 42 struct dmu_buf_impl;
42 43 struct dmu_tx_hold;
43 44 struct dnode_link;
44 45 struct dsl_pool;
45 46 struct dnode;
46 47 struct dsl_dir;
47 48
48 49 struct dmu_tx {
49 50 /*
50 51 * No synchronization is needed because a tx can only be handled
51 52 * by one thread.
52 53 */
53 54 list_t tx_holds; /* list of dmu_tx_hold_t */
54 55 objset_t *tx_objset;
55 56 struct dsl_dir *tx_dir;
56 57 struct dsl_pool *tx_pool;
57 58 uint64_t tx_txg;
58 59 uint64_t tx_lastsnap_txg;
59 60 uint64_t tx_lasttried_txg;
|
↓ open down ↓ |
26 lines elided |
↑ open up ↑ |
60 61 txg_handle_t tx_txgh;
61 62 void *tx_tempreserve_cookie;
62 63 struct dmu_tx_hold *tx_needassign_txh;
63 64
64 65 /* list of dmu_tx_callback_t on this dmu_tx */
65 66 list_t tx_callbacks;
66 67
67 68 /* placeholder for syncing context, doesn't need specific holds */
68 69 boolean_t tx_anyobj;
69 70
71 + /* has this transaction already been delayed? */
72 + boolean_t tx_waited;
73 +
70 74 /* transaction is marked as being a "net free" of space */
71 75 boolean_t tx_netfree;
72 76
73 77 /* time this transaction was created */
74 78 hrtime_t tx_start;
75 79
76 80 /* need to wait for sufficient dirty space */
77 81 boolean_t tx_wait_dirty;
78 82
79 - /* has this transaction already been delayed? */
80 - boolean_t tx_dirty_delayed;
81 -
82 83 int tx_err;
83 84 };
84 85
85 86 enum dmu_tx_hold_type {
86 87 THT_NEWOBJECT,
87 88 THT_WRITE,
88 89 THT_BONUS,
89 90 THT_FREE,
90 91 THT_ZAP,
91 92 THT_SPACE,
92 93 THT_SPILL,
93 94 THT_NUMTYPES
94 95 };
95 96
96 97 typedef struct dmu_tx_hold {
97 98 dmu_tx_t *txh_tx;
98 99 list_node_t txh_node;
99 100 struct dnode *txh_dnode;
100 101 refcount_t txh_space_towrite;
101 102 refcount_t txh_memory_tohold;
102 103 enum dmu_tx_hold_type txh_type;
103 104 uint64_t txh_arg1;
104 105 uint64_t txh_arg2;
105 106 } dmu_tx_hold_t;
106 107
|
↓ open down ↓ |
15 lines elided |
↑ open up ↑ |
107 108 typedef struct dmu_tx_callback {
108 109 list_node_t dcb_node; /* linked to tx_callbacks list */
109 110 dmu_tx_callback_func_t *dcb_func; /* caller function pointer */
110 111 void *dcb_data; /* caller private data */
111 112 } dmu_tx_callback_t;
112 113
113 114 /*
114 115 * These routines are defined in dmu.h, and are called by the user.
115 116 */
116 117 dmu_tx_t *dmu_tx_create(objset_t *dd);
117 -int dmu_tx_assign(dmu_tx_t *tx, uint64_t txg_how);
118 +int dmu_tx_assign(dmu_tx_t *tx, txg_how_t txg_how);
118 119 void dmu_tx_commit(dmu_tx_t *tx);
119 120 void dmu_tx_abort(dmu_tx_t *tx);
120 121 uint64_t dmu_tx_get_txg(dmu_tx_t *tx);
121 122 struct dsl_pool *dmu_tx_pool(dmu_tx_t *tx);
122 123 void dmu_tx_wait(dmu_tx_t *tx);
123 124
124 125 void dmu_tx_callback_register(dmu_tx_t *tx, dmu_tx_callback_func_t *dcb_func,
125 126 void *dcb_data);
126 127 void dmu_tx_do_callbacks(list_t *cb_list, int error);
127 128
128 129 /*
129 130 * These routines are defined in dmu_spa.h, and are called by the SPA.
130 131 */
131 132 extern dmu_tx_t *dmu_tx_create_assigned(struct dsl_pool *dp, uint64_t txg);
132 133
133 134 /*
134 135 * These routines are only called by the DMU.
135 136 */
136 137 dmu_tx_t *dmu_tx_create_dd(dsl_dir_t *dd);
137 138 int dmu_tx_is_syncing(dmu_tx_t *tx);
138 139 int dmu_tx_private_ok(dmu_tx_t *tx);
139 140 void dmu_tx_add_new_object(dmu_tx_t *tx, dnode_t *dn);
140 141 void dmu_tx_dirty_buf(dmu_tx_t *tx, struct dmu_buf_impl *db);
141 142 void dmu_tx_hold_space(dmu_tx_t *tx, uint64_t space);
142 143
143 144 #ifdef ZFS_DEBUG
144 145 #define DMU_TX_DIRTY_BUF(tx, db) dmu_tx_dirty_buf(tx, db)
145 146 #else
146 147 #define DMU_TX_DIRTY_BUF(tx, db)
147 148 #endif
148 149
149 150 #ifdef __cplusplus
150 151 }
151 152 #endif
152 153
153 154 #endif /* _SYS_DMU_TX_H */
|
↓ open down ↓ |
26 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX