Hi Xiang, This series introduces multi-threaded decompression and extraction to fsck.erofs.
The architecture is divided into two decoupled workqueues to prevent thread pool exhaustion gridlock: 1. `erofs_traverse_wq`: Handles the asynchronous directory walk. It localizes the historically global `extract_path` and `dirstack` states into individual payloads, safely traversing the tree and verifying inodes. 2. `erofs_wq`: Dedicated strictly to processing `z_erofs_decompress_req` payloads. Decompression tasks take strict ownership of the raw and output buffers, preventing data races. Testing on heavily packed LZ4HC images demonstrates smooth asynchronous fan-out, successfully overlapping I/O traversal with decompression compute. Nithurshen (2): fsck.erofs: add multi-threaded decompression fsck.erofs: implement concurrent directory traversal fsck/main.c | 450 ++++++++++++++++++++++++--------------- include/erofs/cond.h | 31 +++ include/erofs/internal.h | 20 +- include/erofs/lock.h | 3 + lib/data.c | 216 ++++++++++++++----- 5 files changed, 488 insertions(+), 232 deletions(-) create mode 100644 include/erofs/cond.h -- 2.52.0
