Warnings added to try to find the ufs_dirbad panics
Matthew Dillon
dillon at apollo.backplane.com
Mon Oct 24 10:27:50 PDT 2005
I have added two checks and warnings to the buffer cache code. If
any of these warnings show up in your dmesg during normal operation
(they are run-time warnings, not boot-time warnings), please report
them immediately.
This is somewhat of a shot in the dark, trying to track down the
ufs_dirbad panics that get occassionally reported. I have no idea
whether the panics are related to these checks. FreeBSD users are
reporting similar panics so whatever the problem is it's something
common to both them and us.
"Warning buffer %p (vp %p lblkno %d) was recycled"
Occurs if a buffer is recycled unexpectedly. The code will print this
warning and retry the lookup if it detects the case.
This can theoretically occur when a buffer acquisition races a
buffer release. We are supposed to be protected by a critical section
here but the protection might not be sufficient on an SMP system
if the vnode lock is contested (because the token code might block).
"Warning invalid buffer %p (vp %p lblkno %d) did not have cleared b_blkno cache"
Occurs if a B_INVAL buffer's b_blkno cache has not been reset. The
code will reset the cache if it detects this case.
B_INVAL buffers are supposed to be effectively destroyed by removing
them from the (vp,lblkno) translation table. However, this does not
occur when a buffer is bqrelse()'d. If a buffer marked invalid is not
removed from the translation table re-acquisition of the buffer may
not clear the b_blkno cache and potentially cause a stale filesystem
block to be used for the buffer.
It is unclear whether this situation can occur in real life.
More information about the Kernel
mailing list