Commit b93af2c
mm/damon/vaddr: do not repeat pte_offset_map_lock() until success
DAMON's virtual address space operation set implementation (vaddr) calls
pte_offset_map_lock() inside the page table walk callback function. This
is for reading and writing page table accessed bits. If
pte_offset_map_lock() fails, it retries by returning the page table walk
callback function with ACTION_AGAIN.
pte_offset_map_lock() can continuously fail if the target is a pmd
migration entry, though. Hence it could cause an infinite page table walk
if the migration cannot be done until the page table walk is finished.
This indeed caused a soft lockup when CPU hotplugging and DAMON were
running in parallel.
Avoid the infinite loop by simply not retrying the page table walk. DAMON
is promising only a best-effort accuracy, so missing access to such pages
is no problem.
Link: https://lkml.kernel.org/r/[email protected]
Fixes: 7780d04 ("mm/pagewalkers: ACTION_AGAIN if pte_offset_map_lock() fails")
Signed-off-by: SeongJae Park <[email protected]>
Reported-by: Xinyu Zheng <[email protected]>
Closes: https://lore.kernel.org/[email protected]
Acked-by: Hugh Dickins <[email protected]>
Cc: <[email protected]> [6.5+]
Signed-off-by: Andrew Morton <[email protected]>1 parent 9658d69 commit b93af2c
1 file changed
+2
-6
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
328 | 328 | | |
329 | 329 | | |
330 | 330 | | |
331 | | - | |
332 | | - | |
| 331 | + | |
333 | 332 | | |
334 | | - | |
335 | 333 | | |
336 | 334 | | |
337 | 335 | | |
| |||
481 | 479 | | |
482 | 480 | | |
483 | 481 | | |
484 | | - | |
485 | | - | |
| 482 | + | |
486 | 483 | | |
487 | | - | |
488 | 484 | | |
489 | 485 | | |
490 | 486 | | |
| |||
0 commit comments