Print this page
ZoL PR 9145

@@ -44,10 +44,11 @@
 /*
  * dnode_hold() flags.
  */
 #define DNODE_MUST_BE_ALLOCATED 1
 #define DNODE_MUST_BE_FREE      2
+#define DNODE_DRY_RUN           4
 
 /*
  * dnode_next_offset() flags.
  */
 #define DNODE_FIND_HOLE         1

@@ -391,10 +392,11 @@
 int dnode_hold_impl(struct objset *dd, uint64_t object, int flag, int dn_slots,
     void *ref, dnode_t **dnp);
 boolean_t dnode_add_ref(dnode_t *dn, void *ref);
 void dnode_rele(dnode_t *dn, void *ref);
 void dnode_rele_and_unlock(dnode_t *dn, void *tag, boolean_t evicting);
+int dnode_try_claim(objset_t *os, uint64_t object, int slots);
 void dnode_setdirty(dnode_t *dn, dmu_tx_t *tx);
 void dnode_sync(dnode_t *dn, dmu_tx_t *tx);
 void dnode_allocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, int ibs,
     dmu_object_type_t bonustype, int bonuslen, int dn_slots, dmu_tx_t *tx);
 void dnode_reallocate(dnode_t *dn, dmu_object_type_t ot, int blocksize,

@@ -509,15 +511,10 @@
          * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) requested
          * a range of dnode slots which would overflow the dnode_phys_t.
          */
         kstat_named_t dnode_hold_free_overflow;
         /*
-         * Number of times a dnode_hold(...) was attempted on a dnode
-         * which had already been unlinked in an earlier txg.
-         */
-        kstat_named_t dnode_hold_free_txg;
-        /*
          * Number of times dnode_free_interior_slots() needed to retry
          * acquiring a slot zrl lock due to contention.
          */
         kstat_named_t dnode_free_interior_lock_retry;
         /*