ext4: fix setting random pages PageUptodate
authorMarkus Trippelsdorf <markus@trippelsdorf.de>
Thu, 18 Nov 2010 02:46:06 +0000 (21:46 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 18 Nov 2010 02:46:06 +0000 (21:46 -0500)
commit08da1193d2c8c7a25d0cef7f85d0b9f1ad7c583a
tree5a288945b73bc0ea79ca26e556f8061b51a85c1d
parente53beacd23d9cb47590da6a7a7f6d417b941a994
ext4: fix setting random pages PageUptodate

ext4_end_bio calls put_page and kmem_cache_free before calling
SetPageUpdate(). This can result in setting the PageUptodate bit on
random pages and causes the following BUG:

 BUG: Bad page state in process rm  pfn:52e54
 page:ffffea0001222260 count:0 mapcount:0 mapping:          (null) index:0x0
 arch kernel: page flags: 0x4000000000000008(uptodate)

Fix the problem by moving put_io_page() after the SetPageUpdate() call.

Thanks to Hugh Dickins for analyzing this problem.

Reported-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Tested-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Signed-off-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/page-io.c