108 uint64_t ds_props_obj; /* DMU_OT_DSL_PROPS for snaps */
109 uint64_t ds_userrefs_obj; /* DMU_OT_USERREFS */
110 uint64_t ds_pad[5]; /* pad out to 320 bytes for good measure */
111 } dsl_dataset_phys_t;
112
113 typedef struct dsl_dataset {
114 /* Immutable: */
115 struct dsl_dir *ds_dir;
116 dsl_dataset_phys_t *ds_phys;
117 dmu_buf_t *ds_dbuf;
118 uint64_t ds_object;
119 uint64_t ds_fsid_guid;
120
121 /* only used in syncing context, only valid for non-snapshots: */
122 struct dsl_dataset *ds_prev;
123
124 /* has internal locking: */
125 dsl_deadlist_t ds_deadlist;
126 bplist_t ds_pending_deadlist;
127
128 /* to protect against multiple concurrent incremental recv */
129 kmutex_t ds_recvlock;
130
131 /* protected by lock on pool's dp_dirty_datasets list */
132 txg_node_t ds_dirty_link;
133 list_node_t ds_synced_link;
134
135 /*
136 * ds_phys->ds_<accounting> is also protected by ds_lock.
137 * Protected by ds_lock:
138 */
139 kmutex_t ds_lock;
140 objset_t *ds_objset;
141 uint64_t ds_userrefs;
142
143 /*
144 * ds_owner is protected by the ds_rwlock and the ds_lock
145 */
146 krwlock_t ds_rwlock;
147 kcondvar_t ds_exclusive_cv;
148 void *ds_owner;
149
150 /* no locking; only for making guesses */
|
108 uint64_t ds_props_obj; /* DMU_OT_DSL_PROPS for snaps */
109 uint64_t ds_userrefs_obj; /* DMU_OT_USERREFS */
110 uint64_t ds_pad[5]; /* pad out to 320 bytes for good measure */
111 } dsl_dataset_phys_t;
112
113 typedef struct dsl_dataset {
114 /* Immutable: */
115 struct dsl_dir *ds_dir;
116 dsl_dataset_phys_t *ds_phys;
117 dmu_buf_t *ds_dbuf;
118 uint64_t ds_object;
119 uint64_t ds_fsid_guid;
120
121 /* only used in syncing context, only valid for non-snapshots: */
122 struct dsl_dataset *ds_prev;
123
124 /* has internal locking: */
125 dsl_deadlist_t ds_deadlist;
126 bplist_t ds_pending_deadlist;
127
128 /* protected by lock on pool's dp_dirty_datasets list */
129 txg_node_t ds_dirty_link;
130 list_node_t ds_synced_link;
131
132 /*
133 * ds_phys->ds_<accounting> is also protected by ds_lock.
134 * Protected by ds_lock:
135 */
136 kmutex_t ds_lock;
137 objset_t *ds_objset;
138 uint64_t ds_userrefs;
139
140 /*
141 * ds_owner is protected by the ds_rwlock and the ds_lock
142 */
143 krwlock_t ds_rwlock;
144 kcondvar_t ds_exclusive_cv;
145 void *ds_owner;
146
147 /* no locking; only for making guesses */
|