NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/28448 (stackable filesystems locking breakage when looking up DOTDOT)



The following reply was made to PR kern/28448; it has been noted by GNATS.

From: yamt%mwd.biglobe.ne.jp@localhost (YAMAMOTO Takashi)
To: dholland-bugs%netbsd.org@localhost
Cc: gnats-bugs%NetBSD.org@localhost, kern-bug-people%netbsd.org@localhost, 
netbsd-bugs%netbsd.org@localhost,
        gnats-admin%netbsd.org@localhost, pooka%NetBSD.org@localhost
Subject: Re: kern/28448 (stackable filesystems locking breakage when
        looking up DOTDOT)
Date: Sat,  3 Jan 2009 14:32:13 +0900 (JST)

 > On Sat, Jan 03, 2009 at 01:11:59PM +0900, YAMAMOTO Takashi wrote:
 >  > > 2) the lower layer does not export a lock pointer, in which case the
 >  > >    relock dance in the lower layer will not use the upper layer's
 >  > >    locks
 >  > 
 >  > this PR was about 2).
 >  > it can deadlock between the parent and child directories
 >  > in the upper layer due to the lack of dotdot relock dances in
 >  > the upper layer.  the relock dance in the lower layer doesn't
 >  > make sense because it's done keeping the upper layer vnode locked.
 > 
 > So (to clarify as much as possible) the case is:
 > 
 >    a. locks are not shared between the upper and lower layers
 >    b. we try to lookup .. on an upper layer directory UD
 >    c. vfs locks the directory, which locks both UD and the lower-layer
 >       directory LD corresponding to UD
 >    d. vfs calls VOP_LOOKUP, which goes to layer_lookup, which goes to
 >       the lower fs
 >    e. the lookup op on the lower fs unlocks LD and locks LD's parent,
 >       then returns LD's parent
 >    f. layer_lookup gets LD's parent back and digs out the
 >       corresponding upper vnode with layer_node_create
 >    g. layer_node_create then locks vnode without first unlocking UD
 >    h. this violates the locking order, because UD's parent is locked
 >       after UD.
 > 
 > Do we have any layered fses where both c. and d. happen? It seems to
 > me, based on my perhaps too vague understanding of how the layering
 > system works, that if you don't share locks you can't expect to share
 > the fs namespace, meaning you can't expect to use the default
 > layer_lookup. I suspect this is not the only problem that'll show up
 > if someone tries.
 > 
 > If that's supposed to be legal, then it's a problem, yes. Nice catch :-)
 
 locks can be shared only when the lower vnode exports them
 for the upper layer.  ie. a layered filesystem can't assume that
 it can share locks.
 
 > 
 > (although note that I'm planning to abolish the dotdot-dance)
 
 good to hear.  thanks for working on it.
 how will you do so?
 
 YAMAMOTO Takashi
 
 > 
 > -- 
 > David A. Holland
 > dholland%netbsd.org@localhost
 


Home | Main Index | Thread Index | Old Index