ublk: fix maple tree lockdep warning and cleanup#763
Open
blktests-ci[bot] wants to merge 3 commits intolinus-master_basefrom
Open
ublk: fix maple tree lockdep warning and cleanup#763blktests-ci[bot] wants to merge 3 commits intolinus-master_basefrom
blktests-ci[bot] wants to merge 3 commits intolinus-master_basefrom
Conversation
Author
|
Upstream branch: 6596a02 |
3b54e52 to
6a0b974
Compare
Author
|
Upstream branch: 507bd4b |
8cb251c to
20e3ec7
Compare
6a0b974 to
59ca59b
Compare
Author
|
Upstream branch: dd6c438 |
20e3ec7 to
2df5338
Compare
94f0438 to
857ada9
Compare
Author
|
Upstream branch: dd6c438 |
ublk_buf_cleanup() iterates the maple tree with mas_for_each() without holding mas_lock, triggering a lockdep splat on CONFIG_PROVE_RCU kernels since mas_find() internally uses rcu_dereference_check() which requires either RCU or the tree lock. Fix by holding mas_lock around the iteration, and call mas_erase() before freeing each range to avoid dangling pointers in the tree. Fixes: 5e86443 ("ublk: replace xarray with IDA for shmem buffer index allocation") Reported-by: Jens Axboe <[email protected]> Closes: https://lore.kernel.org/linux-block/[email protected]/ Signed-off-by: Ming Lei <[email protected]>
Extract the shared walk+erase+unpin+kfree loop into ublk_shmem_remove_ranges(). When buf_index >= 0, only ranges matching that index are removed; when buf_index < 0, all ranges are removed. Also extract ublk_unpin_range_pages() to share the page unpinning loop. Convert both __ublk_ctrl_unreg_buf() and ublk_buf_cleanup() to use the new helper. Signed-off-by: Ming Lei <[email protected]>
ublk_shmem_remove_ranges() calls unpin_user_pages() while holding the maple tree spinlock (mas_lock). Although unpin_user_pages() is safe in atomic context, holding the spinlock across potentially many page unpinning operations is not ideal. Split into __ublk_shmem_remove_ranges() which erases up to 64 ranges under mas_lock, collecting base_pfn and nr_pages into a temporary xarray. Then drop the lock and unpin pages outside spinlock context. ublk_shmem_remove_ranges() loops until all matching ranges are processed. Signed-off-by: Ming Lei <[email protected]>
2df5338 to
07371b3
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull request for series with
subject: ublk: fix maple tree lockdep warning and cleanup
version: 1
url: https://patchwork.kernel.org/project/linux-block/list/?series=1084496