Re: locking rules for ->dirty_inode()

Andrew Morton
2002-09-20T16:42:16Z

Nikita Danilov wrote:
>
> ...
> Actually, I came over this while trying to describe lock ordering in
> reiser4 after I just started integrating other kernel locks there. I
> wonder, has somebody already done this, writing up kernel lock
> hierarchy, that is?
>

I've been keeping the comment at the top of filemap.c uptodate when
I discover things. It got smaller a while ago when certain rude
locks were spoken to.

Really, this form of representation isn't rich enough, but the
format certainly provides enough info to know when you might be
taking locks in the wrong order, and it tells you where to look
to see them being taken.

The problem with the format is that locks are only mentioned once,
and it can't describe the whole graph. Maybe it needs something
like:

* ->i_shared_lock (vmtruncate)
* ->private_lock (__free_pte->__set_page_dirty_buffers)
* ->swap_list_lock
* ->swap_device_lock (exclusive_swap_page, others)
* ->mapping->page_lock
* ->inode_lock (__mark_inode_dirty)
* ->sb_lock (fs/fs-writeback.c)
+* ->i_shared_lock
+* ->page_table_lock (lots of places)
*/

Don't know. Maybe someone somewhere has developed a notation
for this? How are you doing it?