Re: 2.6.16-rc6-mm2

Andrew Morton
2006-03-18T20:57:43Z

"Rafael J. Wysocki" <rjw@sisk.pl> wrote:
>
> On Saturday 18 March 2006 13:40, Andrew Morton wrote:
> >
> > ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.16-rc6/2.6.16-rc6-mm2/
>
> I get the following oops from it 100% of the time (on boot):
>
> Trying to free ramdisk memory ... ----------- [cut here ] --------- [please bite here ] ---------
> Kernel BUG at fs/buffer.c:1629
> invalid opcode: 0000 [1] PREEMPT
> last sysfs file: /block/hdc/range
> CPU 0
> Modules linked in:
> Pid: 1, comm: swapper Not tainted 2.6.16-rc6-mm2 #16
> RIP: 0010:[<ffffffff80280d9a>] <ffffffff80280d9a>{block_invalidatepage+202}
> RSP: 0000:ffff81005ff07ac8 EFLAGS: 00010246
> RAX: 0000000000000000 RBX: ffff810037c09138 RCX: ffff810037c09228
> RDX: 0000000000000000 RSI: ffff81005ff07a88 RDI: 0000000000000000
> RBP: ffff81005ff07af8 R08: 0000000000000002 R09: ffff81005ff07a99
> R10: ffff810037c09138 R11: 0000000000000010 R12: ffff810037c09138
> R13: 0000000000001000 R14: ffff810037c09138 R15: ffff810001c34e28
> FS: 0000000000000000(0000) GS:ffffffff80690000(0000) knlGS:0000000000000000
> CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b
> CR2: 00002afbe89a3000 CR3: 000000005fe36000 CR4: 00000000000006e0
> Process swapper (pid: 1, threadinfo ffff81005ff06000, task ffff81005ff05530)
> Stack: 0000000000000000 ffff810001c34e28 0000000000000002 0000000000000001
> ffff810037df47e0 ffffffffffffffff ffff81005ff07b08 ffffffff8027f7b3
> ffff81005ff07b28 ffffffff802610d5
> Call Trace: <ffffffff8027f7b3>{do_invalidatepage+35}
> <ffffffff802610d5>{truncate_complete_page+37} <ffffffff8026154f>{truncate_inode_pages_range+207}
> <ffffffff802617c0>{truncate_inode_pages+16} <ffffffff803bac96>{rd_ioctl+86}

Yeah, ramdisk does strange things.

That's two. I guess I need to see if Neil left any other little timebombs
in there for us ;)

--- devel/fs/buffer.c~make-address_space_operations-invalidatepage-return-void-fix 2006-03-18 12:52:37.000000000 -0800
+++ devel-akpm/fs/buffer.c 2006-03-18 12:53:04.000000000 -0800
@@ -1624,10 +1624,8 @@ void block_invalidatepage(struct page *p
* The get_block cached value has been unconditionally invalidated,
* so real IO is not possible anymore.
*/
- if (offset == 0) {
- int ret = try_to_release_page(page, 0);
- BUG_ON(!ret);
- }
+ if (offset == 0)
+ try_to_release_page(page, 0);
out:
return;
}
_