Kernel lock order
Is there a list describing the lock hierarchy ?
If not:
Does do_swap_page() (in mm/memory.c) release mm->page_table_lock because one cannot hold this lock when lookup_swap_cache() ... __find_get_page() takes pagecache_lock ? Or does it do only for shorten the locked path ? (Can I keep mm->page_table_lock when I call __find_get_page() ?)
Thanks,
Zoltan Menyhart
Quoted 1 line · Zoltan Menyhart
Is there a list describing the lock hierarchy ?
There is indeed Documentation/vm/locking - but I wouldn't trust it for an instant! These details change from time to time, Documentation is likely to lag far behind, the source must be your reference.
There is also a very useful "NOTE:" in the 2.4 mm/filemap.c, which did get updated in 2.4.14; but that doesn't mention the page_table_lock.
Quoted 4 lines
Does
do_swap_page()(inmm/memory.c) releasemm->page_table_lockbecause one cannot hold this lock whenlookup_swap_cache()...__find_get_page()takespagecache_lock? Or does it do only for shorten the locked path ? (Can I keepmm->page_table_lockwhen I call__find_get_page()?)
I deduce from "pagecache_lock" that you're asking about current 2.4, though I think an equivalent answer would apply to current 2.5. It does it to shorten the locked path, you could hold mm->page_table_lock when you call __find_get_page(): a precedent is where do_swap_page() holds page_table_lock while calling remove_exclusive_swap_page(), which may take the pagecache_lock.
But tomorrow... who knows?
Hugh