hammer2 - Fix excess chain structure allocations during bulkfree (3)
authorMatthew Dillon <dillon@apollo.backplane.com>
Sat, 12 Mar 2022 01:18:38 +0000 (17:18 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sat, 12 Mar 2022 01:18:38 +0000 (17:18 -0800)
commitf7a9ce16252aa547c85ff84ec40272848e5587bd
tree87b7e96b62510d0eb36ded47b1dc4c490478e0af
parentf89dddc72568ef3eb11aa11e247b37ce69e77bce
hammer2 - Fix excess chain structure allocations during bulkfree (3)

* Fix excess chain structure allocations during bulkfree, AGAIN.
  This time for real.  The algorithmic change I made was not sufficient,
  because I was not backing-out the recursion all the way after hitting
  a deferral.  Instead, the code was re-recursing down another branch
  while still really deep into the tree.

  The problem was mostly triggered on the inode radix tree for filesystems
  containing many inodes (like a hundred million inodes), and would lead
  to a kmalloc panic due to memory exhaustion.

* Fixed for real this time.  When we hit the recursion limit, the code
  fully backs out of the traversal (recording its placemarkers on the way
  back up), then starts again at the deepest placemarker rather than
  the shallowest placemarker.
sys/vfs/hammer2/hammer2_bulkfree.c