On Thu, Jun 07, 2018 at 05:13:06PM -0700, Philip Guenther wrote:
> (The weird "show witness" output for scsi_base.c mutexes is because 
> they're on the stack and need to be unlinked from witness before 
> returning; that *might* be causing the problem here, but I doubt it.  I'm 
> starting on a diff for that part...)

As long as each lock gets unlocked before it disappears there should be
no problem, or that is the intent anyhow. The use of stack versus the
use of heap should not make a difference here.

The problem is in the lock initializer macro. Inside the initializer,
there is the assignment

        .lo_type = &(struct lock_type){ .lt_name = __MTX_NAME }

For correct operation, the compound literal should have static storage
duration. Unfortunately, that is not the case when the initializer
macro is used in block scope. If there is no way to force the storage
duration, the details of lock enrollment to WITNESS need revision
(or the use of the lock initializer macros has to be banned in block
scope...).

Reply via email to