On 2021/11/18 21:58, Huang Jianan via Linux-erofs wrote:
We observed the following deadlock in the stress test under low
memory scenario:

Thread A                               Thread B
- erofs_shrink_scan
  - erofs_try_to_release_workgroup
   - erofs_workgroup_try_to_freeze -- A
                                        - z_erofs_do_read_page
                                         - z_erofs_collection_begin
                                          - z_erofs_register_collection
                                           - erofs_insert_workgroup
                                            - xa_lock(&sbi->managed_pslots) -- B
                                            - erofs_workgroup_get
                                             - erofs_wait_on_workgroup_freezed 
-- A
   - xa_erase
    - xa_lock(&sbi->managed_pslots) -- B

To fix this, it need to hold the xa lock before freeze the workgroup
beacuse we will operate xarry. So let's hold the lock before access
each workgroup, just like when we using the radix tree before.

Fixes: 64094a04414f ("erofs: convert workstn to XArray")
Signed-off-by: Huang Jianan <[email protected]>

Reviewed-by: Chao Yu <[email protected]>

Thanks,

Reply via email to