]> git.karo-electronics.de Git - karo-tx-linux.git/commit
nilfs2: fix oops due to inconsistent state in page with discrete b-tree nodes
authorRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Tue, 28 Jul 2009 08:55:29 +0000 (17:55 +0900)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sun, 16 Aug 2009 21:18:34 +0000 (14:18 -0700)
commit24761757735bec5aceb9f405cb6aa643765f9f78
treebec1d6061860a0e4bda9caffeeb50f4b63ac87f4
parent9648d1ac8549ae89855fe2f4691ccded7b7b1070
nilfs2: fix oops due to inconsistent state in page with discrete b-tree nodes

commit a97778457f22181e8c38c4cd7d7e528378738a98 upstream.

Andrea Gelmini gave me a report that a kernel oops hit on a nilfs
filesystem with a 1KB block size when doing rsync.

This turned out to be caused by an inconsistency of dirty state
between a page and its buffers storing b-tree node blocks.

If the page had multiple buffers split over multiple logs, and if the
logs were written at a time, a dirty flag remained in the page even
every dirty flag in the buffers was cleared.

This will fix the failure by dropping the dirty flag properly for
pages with the discrete multiple b-tree nodes.

Reported-by: Andrea Gelmini <andrea.gelmini@gmail.com>
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Tested-by: Andrea Gelmini <andrea.gelmini@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/nilfs2/segment.c