In rare situations, drop_buffers() can be called for a page which has buffers, but no ->mapping (it was truncated, but the buffers were left behind because ext3 was still fiddling with them). But if there was an I/O error in a buffer_head, drop_buffers() will try to get at the address_space and will oops. Signed-off-by: Andrew Morton --- fs/buffer.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN fs/buffer.c~drop-buffers-oops-fix fs/buffer.c --- 25/fs/buffer.c~drop-buffers-oops-fix 2005-04-29 18:54:32.332228752 -0700 +++ 25-akpm/fs/buffer.c 2005-04-29 18:54:32.338227840 -0700 @@ -2917,7 +2917,7 @@ drop_buffers(struct page *page, struct b bh = head; do { - if (buffer_write_io_error(bh)) + if (buffer_write_io_error(bh) && page->mapping) set_bit(AS_EIO, &page->mapping->flags); if (buffer_busy(bh)) goto failed; _