Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Sep 2005 09:23:18 +0200
From:      Suleiman Souhlal <ssouhlal@FreeBSD.org>
To:        Jeff Roberson <jroberson@chesapeake.net>
Cc:        cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/fs/nullfs null_vnops.c
Message-ID:  <D8DF240D-9A97-467A-A125-2F1A75EBA9EA@FreeBSD.org>
In-Reply-To: <20050902184655.C4631@10.0.0.1>
References:  <200509021549.j82Fnut9051619@repoman.freebsd.org> <20050902184655.C4631@10.0.0.1>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi,

On Sep 3, 2005, at 3:48 AM, Jeff Roberson wrote:
> I'm not sure that this is correct.  The line:
> lockmgr(vnlock, LK_RELEASE, NULL, curthread);
>
> Should unlock the lower node which vput would have already  
> unlocked.  It must be done this way to properly adjust the vnlock ptr.

I'm not sure I understand what you're saying. After this commit, the  
code is:
         vnlock = vp->v_vnlock;
         vp->v_vnlock = &vp->v_lock;
         lockmgr(vp->v_vnlock, LK_EXCLUSIVE, NULL, curthread);
         if (lowervp) {
                 vput(lowervp);
         } else
                 lockmgr(vnlock, LK_RELEASE, NULL, curthread);
Which I believe unlocks things in the right order.

However, after discussing with kan@, we identified two races:
     - There is a short time between changing the pointer and locking  
vp->v_lock during which someone might steal the lock from us, so we  
should hold the interlock during these two operations.
     - Someone might be waiting on the lower vnode's lock, and when  
it is released, he might think that he has the vnode. I am unsure how  
this can be fixed.

--
Suleiman Souhlal     | ssouhlal@vt.edu
The FreeBSD Project  | ssouhlal@FreeBSD.org




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?D8DF240D-9A97-467A-A125-2F1A75EBA9EA>