cluster01.patch - bug fix for file clustering code
dillon at apollo.backplane.com
Tue Mar 7 12:57:10 PST 2006
This patch is fairly straightforward but needs some additinoal testing
before I commit it. I intend to commit it on Friday. I found it
while working on the block number -> 64 bit offset BUF/BIO conversion.
Basically the problem being addressed here is in a bit of the asynchronous
read-ahead code. The code is improperly issuing BMAPs for data blocks
whos related buffers have not been acquired, then acquiring the buffers
and unconditionally setting the block translation field after the
fact. If the buffer is reallocated to a different block inbetween
then a stale translation can wind up being assigned to it. If the
buffer is later dirtied, then the filesystem could become corrupted.
The sequence of events required to produce corruption would occur
fairly rarely, which is a similar M.O. to the dirbad panics.
Unfortunately, as before, there is no smoking gun here so the bug might
or might not be related.
The same bug exists in FreeBSD-current.
More information about the Kernel