NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/38273: "lockdebug_barrier: spin lock held" from ld_ataraid_start_raid0()
The following reply was made to PR kern/38273; it has been noted by GNATS.
From: "Greg A. Woods" <woods%planix.com@localhost>
To: NetBSD GNATS <gnats-bugs%NetBSD.org@localhost>
Cc: NetBSD Kernel Bug People <kern-bug-people%netbsd.org@localhost>
Subject: Re: kern/38273: "lockdebug_barrier: spin lock held" from
ld_ataraid_start_raid0()
Date: Fri, 25 Apr 2008 13:13:42 -0400
I've been trying my hand at looking deeper at this problem but I'm
having a difficult time figuring out which lock is which, and at this
point I'm not even sure if the mutex_vector_enter() in the stack
backtrace is the same as mutex_enter() in the source or not.
The first line in ldstart() is:
mutex_enter(&sc->sc_mutex);
Then a little bit later, before any mutex_exit(&sc->sc_mutex) there's a
call, through the sc_start function pointer, to the ld_ataraid_start_raid0()
routine.
The only locking I can see that ld_ataraid_start_raid0() does is:
mutex_enter(&cbp->cb_buf.b_vp->v_interlock);
Is that the same lock as is used in ldstart(), i.e. the sc_mutex?
Interestingly I see that before and after calling biodone(), ldstart()
releases and then re-acquires the sc_mutex (if I'm interpreting this
right):
mutex_exit(&sc->sc_mutex);
biodone(bp);
mutex_enter(&sc->sc_mutex);
Should the same be done before calling the sc_start function?
Or should ld_ataraid_start_raid0() not be doing any locking at all?
--
Greg A. Woods
Planix, Inc.
<woods%planix.com@localhost> +1 416 489-5852 x122
http://www.planix.com/
Home |
Main Index |
Thread Index |
Old Index