NetBSD-Bugs archive

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

kern/41374: getnewvnode deadlock



>Number:         41374
>Category:       kern
>Synopsis:       getnewvnode deadlock
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu May 07 04:45:00 +0000 2009
>Originator:     YAMAMOTO Takashi <yamt%mwd.biglobe.ne.jp@localhost>
>Release:        NetBSD 5.99.11
>Organization:

>Environment:
        
        
System: NetBSD kaeru 5.99.11
Architecture: i386
Machine: i386
>Description:

        a thread doing getcleanvnode:
        pick a vnode
        acqure v_interlock
        v_usecount++
        call vclean

                now, another thread doing cache_lookup:
                picks the vnode
                vtryget succeed
                vn_lock succeed

        now in vclean:
        set VI_XLOCK (too late to be noticed by the competing thread)
        wait on the vnode lock (this might violate locking order)

>How-To-Repeat:
        code inspection.

>Fix:
        in the case of getcleanvnode,
        set VI_XLOCK before incrementing v_usecount?

>Unformatted:
        
        


Home | Main Index | Thread Index | Old Index