mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-01-14 17:22:05 +03:00
dnode: remove dn_dirty_txg and DNODE_IS_DIRTY
dn_dirty_txg only existed for DNODE_IS_DIRTY(). In turn, that only existed to ensure that a dnode was clean before making it eligible for removal from the array of cached dnodes attached to the object 0 L0 dbuf. dn_dirtycnt is enough to check that now, so use it directly and remove the rest. Sponsored-by: Klara, Inc. Sponsored-by: Wasabi Technology, Inc. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Robert Evans <evansr@google.com> Reviewed-by: Adam Moss <c@yotes.com> Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com> Signed-off-by: Rob Norris <rob.norris@klarasystems.com> Closes #16297 Closes #17652 Closes #17658
This commit is contained in:
parent
f3e49b0cf5
commit
eecff1b4a9
@ -168,7 +168,6 @@ extern "C" {
|
||||
* dn_allocated_txg
|
||||
* dn_free_txg
|
||||
* dn_assigned_txg
|
||||
* dn_dirty_txg
|
||||
* dn_dirtycnt
|
||||
* dd_assigned_tx
|
||||
* dn_notxholds
|
||||
|
||||
@ -340,7 +340,6 @@ struct dnode {
|
||||
uint64_t dn_allocated_txg;
|
||||
uint64_t dn_free_txg;
|
||||
uint64_t dn_assigned_txg;
|
||||
uint64_t dn_dirty_txg; /* txg dnode was last dirtied */
|
||||
uint8_t dn_dirtycnt;
|
||||
kcondvar_t dn_notxholds;
|
||||
kcondvar_t dn_nodnholds;
|
||||
@ -469,9 +468,6 @@ void dnode_free_interior_slots(dnode_t *dn);
|
||||
|
||||
void dnode_set_storage_type(dnode_t *dn, dmu_object_type_t type);
|
||||
|
||||
#define DNODE_IS_DIRTY(_dn) \
|
||||
((_dn)->dn_dirty_txg >= spa_syncing_txg((_dn)->dn_objset->os_spa))
|
||||
|
||||
#define DNODE_LEVEL_IS_CACHEABLE(_dn, _level) \
|
||||
((_dn)->dn_objset->os_primary_cache == ZFS_CACHE_ALL || \
|
||||
(((_level) > 0 || DMU_OT_IS_METADATA((_dn)->dn_type)) && \
|
||||
|
||||
@ -2291,8 +2291,6 @@ dbuf_dirty(dmu_buf_impl_t *db, dmu_tx_t *tx)
|
||||
|
||||
mutex_enter(&dn->dn_mtx);
|
||||
dnode_set_dirtyctx(dn, tx, db);
|
||||
if (tx->tx_txg > dn->dn_dirty_txg)
|
||||
dn->dn_dirty_txg = tx->tx_txg;
|
||||
mutex_exit(&dn->dn_mtx);
|
||||
|
||||
if (db->db_blkid == DMU_SPILL_BLKID)
|
||||
|
||||
@ -173,7 +173,6 @@ dnode_cons(void *arg, void *unused, int kmflag)
|
||||
dn->dn_allocated_txg = 0;
|
||||
dn->dn_free_txg = 0;
|
||||
dn->dn_assigned_txg = 0;
|
||||
dn->dn_dirty_txg = 0;
|
||||
dn->dn_dirtyctx = 0;
|
||||
dn->dn_dirtyctx_firstset = NULL;
|
||||
dn->dn_dirtycnt = 0;
|
||||
@ -230,7 +229,6 @@ dnode_dest(void *arg, void *unused)
|
||||
ASSERT0(dn->dn_allocated_txg);
|
||||
ASSERT0(dn->dn_free_txg);
|
||||
ASSERT0(dn->dn_assigned_txg);
|
||||
ASSERT0(dn->dn_dirty_txg);
|
||||
ASSERT0(dn->dn_dirtyctx);
|
||||
ASSERT0P(dn->dn_dirtyctx_firstset);
|
||||
ASSERT0(dn->dn_dirtycnt);
|
||||
@ -694,7 +692,6 @@ dnode_destroy(dnode_t *dn)
|
||||
dn->dn_allocated_txg = 0;
|
||||
dn->dn_free_txg = 0;
|
||||
dn->dn_assigned_txg = 0;
|
||||
dn->dn_dirty_txg = 0;
|
||||
dn->dn_dirtycnt = 0;
|
||||
|
||||
dn->dn_dirtyctx = 0;
|
||||
@ -807,7 +804,6 @@ dnode_allocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, int ibs,
|
||||
|
||||
dn->dn_free_txg = 0;
|
||||
dn->dn_dirtyctx_firstset = NULL;
|
||||
dn->dn_dirty_txg = 0;
|
||||
dn->dn_dirtycnt = 0;
|
||||
|
||||
dn->dn_allocated_txg = tx->tx_txg;
|
||||
@ -959,7 +955,6 @@ dnode_move_impl(dnode_t *odn, dnode_t *ndn)
|
||||
ndn->dn_allocated_txg = odn->dn_allocated_txg;
|
||||
ndn->dn_free_txg = odn->dn_free_txg;
|
||||
ndn->dn_assigned_txg = odn->dn_assigned_txg;
|
||||
ndn->dn_dirty_txg = odn->dn_dirty_txg;
|
||||
ndn->dn_dirtyctx = odn->dn_dirtyctx;
|
||||
ndn->dn_dirtyctx_firstset = odn->dn_dirtyctx_firstset;
|
||||
ndn->dn_dirtycnt = odn->dn_dirtycnt;
|
||||
@ -1025,7 +1020,6 @@ dnode_move_impl(dnode_t *odn, dnode_t *ndn)
|
||||
odn->dn_allocated_txg = 0;
|
||||
odn->dn_free_txg = 0;
|
||||
odn->dn_assigned_txg = 0;
|
||||
odn->dn_dirty_txg = 0;
|
||||
odn->dn_dirtyctx = 0;
|
||||
odn->dn_dirtyctx_firstset = NULL;
|
||||
odn->dn_dirtycnt = 0;
|
||||
@ -1279,8 +1273,8 @@ dnode_check_slots_free(dnode_children_t *children, int idx, int slots)
|
||||
} else if (DN_SLOT_IS_PTR(dn)) {
|
||||
mutex_enter(&dn->dn_mtx);
|
||||
boolean_t can_free = (dn->dn_type == DMU_OT_NONE &&
|
||||
zfs_refcount_is_zero(&dn->dn_holds) &&
|
||||
!DNODE_IS_DIRTY(dn));
|
||||
dn->dn_dirtycnt == 0 &&
|
||||
zfs_refcount_is_zero(&dn->dn_holds));
|
||||
mutex_exit(&dn->dn_mtx);
|
||||
|
||||
if (!can_free)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user