Re: 2.6.0test9 Reiserfs boot time "buffer layer error at fs/buffer.c:431"

Oleg Drokin
2003-10-29T21:50:18Z

Hello!

Andrew Morton <akpm@osdl.org> wrote:
>> Here are the results (output of dmesg) from booting a kernel with this
>> patch:
>> set_blocksize: size=4096
>> buffer layer error at fs/buffer.c:431
AM> hm, that didn't tell us much :(
AM> Could you add Oleg's patch as well?

Actually it will say that device's block size is 4096 (confirming
last set_blocksize was at least partially succesful), but what
it does not tell us is how those buffers have survived after blocksize
was changed and all buffers were invalidated.
(These buffers are there because reiserfs first reads that offset (in bytes)
with whatever current blocksize is, except they should have been invalidated of
course).
Even if invalidate_bdev() -> invalidate_inode_pages() have not cleaned
everything, truncate_inode_pages() should have done this.
So probably this page means do_invalidate_page() ... -> try_to_free_buffers()
have failed for whatever reason.
We did not write there yet, so this is not PageWriteback case.
But if the read is still going on, I guess we won't free the page/buffers?
Or am I missing some wait_on_buffer()?
But anyway that might explains buffers being still in page, but not such
a page present in a mapping. (except if we have not pickup this page from a list
of free pages not looking that it still have stale buffers)

Bye,
Oleg