mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-25 03:37:45 +03:00
Illumos #3464
3464 zfs synctask code needs restructuring Reviewed by: Dan Kimmel <dan.kimmel@delphix.com> Reviewed by: Adam Leventhal <ahl@delphix.com> Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: Christopher Siden <christopher.siden@delphix.com> Approved by: Garrett D'Amore <garrett@damore.org> References: https://www.illumos.org/issues/3464 illumos/illumos-gate@3b2aab1880 Ported-by: Tim Chase <tim@chase2k.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #1495
This commit is contained in:
committed by
Brian Behlendorf
parent
6f1ffb0665
commit
13fe019870
+21
-16
@@ -659,6 +659,8 @@ txg_wait_synced(dsl_pool_t *dp, uint64_t txg)
|
||||
{
|
||||
tx_state_t *tx = &dp->dp_tx;
|
||||
|
||||
ASSERT(!dsl_pool_config_held(dp));
|
||||
|
||||
mutex_enter(&tx->tx_sync_lock);
|
||||
ASSERT(tx->tx_threads == 2);
|
||||
if (txg == 0)
|
||||
@@ -682,6 +684,8 @@ txg_wait_open(dsl_pool_t *dp, uint64_t txg)
|
||||
{
|
||||
tx_state_t *tx = &dp->dp_tx;
|
||||
|
||||
ASSERT(!dsl_pool_config_held(dp));
|
||||
|
||||
mutex_enter(&tx->tx_sync_lock);
|
||||
ASSERT(tx->tx_threads == 2);
|
||||
if (txg == 0)
|
||||
@@ -747,42 +751,43 @@ txg_list_empty(txg_list_t *tl, uint64_t txg)
|
||||
}
|
||||
|
||||
/*
|
||||
* Add an entry to the list.
|
||||
* Returns 0 if it's a new entry, 1 if it's already there.
|
||||
* Add an entry to the list (unless it's already on the list).
|
||||
* Returns B_TRUE if it was actually added.
|
||||
*/
|
||||
int
|
||||
boolean_t
|
||||
txg_list_add(txg_list_t *tl, void *p, uint64_t txg)
|
||||
{
|
||||
int t = txg & TXG_MASK;
|
||||
txg_node_t *tn = (txg_node_t *)((char *)p + tl->tl_offset);
|
||||
int already_on_list;
|
||||
boolean_t add;
|
||||
|
||||
mutex_enter(&tl->tl_lock);
|
||||
already_on_list = tn->tn_member[t];
|
||||
if (!already_on_list) {
|
||||
add = (tn->tn_member[t] == 0);
|
||||
if (add) {
|
||||
tn->tn_member[t] = 1;
|
||||
tn->tn_next[t] = tl->tl_head[t];
|
||||
tl->tl_head[t] = tn;
|
||||
}
|
||||
mutex_exit(&tl->tl_lock);
|
||||
|
||||
return (already_on_list);
|
||||
return (add);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add an entry to the end of the list (walks list to find end).
|
||||
* Returns 0 if it's a new entry, 1 if it's already there.
|
||||
* Add an entry to the end of the list, unless it's already on the list.
|
||||
* (walks list to find end)
|
||||
* Returns B_TRUE if it was actually added.
|
||||
*/
|
||||
int
|
||||
boolean_t
|
||||
txg_list_add_tail(txg_list_t *tl, void *p, uint64_t txg)
|
||||
{
|
||||
int t = txg & TXG_MASK;
|
||||
txg_node_t *tn = (txg_node_t *)((char *)p + tl->tl_offset);
|
||||
int already_on_list;
|
||||
boolean_t add;
|
||||
|
||||
mutex_enter(&tl->tl_lock);
|
||||
already_on_list = tn->tn_member[t];
|
||||
if (!already_on_list) {
|
||||
add = (tn->tn_member[t] == 0);
|
||||
if (add) {
|
||||
txg_node_t **tp;
|
||||
|
||||
for (tp = &tl->tl_head[t]; *tp != NULL; tp = &(*tp)->tn_next[t])
|
||||
@@ -794,7 +799,7 @@ txg_list_add_tail(txg_list_t *tl, void *p, uint64_t txg)
|
||||
}
|
||||
mutex_exit(&tl->tl_lock);
|
||||
|
||||
return (already_on_list);
|
||||
return (add);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -845,13 +850,13 @@ txg_list_remove_this(txg_list_t *tl, void *p, uint64_t txg)
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
int
|
||||
boolean_t
|
||||
txg_list_member(txg_list_t *tl, void *p, uint64_t txg)
|
||||
{
|
||||
int t = txg & TXG_MASK;
|
||||
txg_node_t *tn = (txg_node_t *)((char *)p + tl->tl_offset);
|
||||
|
||||
return (tn->tn_member[t]);
|
||||
return (tn->tn_member[t] != 0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user