hammer2 - Fix critical bulkfree bug, refactor hammer2_io

Operating Systems / DragonFlyBSD - Matthew Dillon [apollo.backplane.com] - 29 August 2017 17:55 EDT

- The bulkfree scan code was corrupting storage elements allocated beyond the 512GB mark due to not resetting the bulk duplicate subtree detection heuristic for each new storage range being evaluated.

Fixed by zeroing out the heuristic in the ranging loop.

- Refactor hammer2_io.c. This module was originally designed for completely asynchronous operation (with callbacks), but the backend chain code was subsequently redesigned to use kernel threads for each target device. I/O operations in the kernel threads were issued synchronously.

Remove all the asynchronous support code, which is like 50% of the module. Get rid of the IOCB mechanism entirely. Simplify the hammer2_io structure and flags interactions and simplify the API.

- Add some temporary debugging to the unmount path.

85b1f26 hammer2 - Fix critical bulkfree bug, refactor hammer2_io
sys/vfs/hammer2/hammer2.h | 49 +--
sys/vfs/hammer2/hammer2_bulkfree.c | 32 +-
sys/vfs/hammer2/hammer2_flush.c | 2 +
sys/vfs/hammer2/hammer2_freemap.c | 7 +-
sys/vfs/hammer2/hammer2_io.c | 841 +++++++++----------------------------
sys/vfs/hammer2/hammer2_strategy.c | 2 +-
sys/vfs/hammer2/hammer2_vfsops.c | 5 +
7 files changed, 241 insertions(+), 697 deletions(-)

Upstream: gitweb.dragonflybsd.org


  • Share