tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: memcpy of struct buf, or similar?
Chris Gilbert wrote:
> Simon Burge wrote:
>> Andrew Doran wrote:
>>
>>> I am trying to fix PR 38761. [ ... ]
>> FWIW, just sticking a
>>
>> KASSERT(mutex_owned(&bufcache_lock));
>>
>> before each time b_cflags is modified fails to reach single user when it
>> hits genfs_getpages():
>>
>> panic: kernel diagnostic assertion "mutex_owned(&bufcache_lock)" failed:
>> file "../../../../miscfs/genfs/genfs_io.c", line 418
>
> I think thats a false positive, getiobuf gives you a fresh clean buffer,
> which isn't known about to the buffer cache code (yet) Looking at the
> getiobuf it already sets cflags to BC_BUSY, so doing so genfs doesn't
> actually need to do so (and probably shouldn't anyway, otherwise people
> might thing cflags can be played with outside of the bufcache code)
>
> I've also seen a similar hang. I had a biolock and a biowait on the
> same buffer, and bunch of tstiles.
>
> The biowait was from an open call. The biolock was from a close call.
> AFAIR the vnode was different, but the buf was the same.
>
> show buf indicated that the buffer was flagged as done.
>
> Since applying ad's patch to add a KASSERT for cv_has_waiters(or running
> LOCKDEBUG kernel) I've not been able to repro the issue, build.sh -j8
> (on a quad-core) runs to completion, even with raidframe rebuilding
> underneath it.
Doh, spoke too soon. With raidframe having completed it's rebuild the
system dived straight into a panic on the next build.sh, with the
biodone KASSERT. The biodone caller was rf_State_LastState.
Thanks,
Chris
Home |
Main Index |
Thread Index |
Old Index