2002-06-28 13:27:15

by Menyhart Zoltan

[permalink] [raw]
Subject: 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


2002-06-28 16:31:16

by Hugh Dickins

[permalink] [raw]
Subject: Re: Kernel lock order

On Fri, 28 Jun 2002, Zoltan Menyhart wrote:
> 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.

> 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() ?)

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