tech-kern archive

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

Re: LOCKDEBUG_BARRIER in mi_userret (was: Re: Another force unmount failure)



   Date: Fri, 17 Jul 2015 18:37:30 +0200
   From: manu%netbsd.org@localhost (Emmanuel Dreyfus)

   Taylor R Campbell <campbell+netbsd-tech-kern%mumble.net@localhost> wrote:

   > `Last locked' tells you the return address of the call to rw_enter
   > that last acquired the lock.  (The other addresses may be useful for
   > other lockdebug panics but aren't likely to be of much use here.)

   Here is the code. The function cannot exit without vp->v_interlock being
   unlocked. What does that means? 

   (gdb) list *0xc018b217
   0xc018b217 is in genfs_lock
   (../../../../miscfs/genfs/genfs_vnops.c:385).
   380                     return error;
   381             }
   382     
   383             fstrans_start(mp, FSTRANS_SHARED);
   384             rw_enter(&vp->v_lock, op);
   385             mutex_enter(vp->v_interlock);

What's locked is not vp_interlock, but v_lock.  The address c018b217
or line 385 is the return address of the lock, i.e. what happens
afterward.

Since this is in genfs_lock, what happened here is almost certainly
that you locked a vnode but didn't unlock it.  Unfortunately,
lockdebug does not provide a full stack trace, so you'll have to guess
where the relevant vn_lock was.

(Perhaps we ought to put extra lockdebug crud in vn_lock and a new
vn_unlock in order to track these things down more usefully.)


Home | Main Index | Thread Index | Old Index