ext4: Fix dirtying of journalled buffers in data=journal mode
authorJan Kara <jack@suse.cz>
Thu, 5 Aug 2010 18:41:42 +0000 (14:41 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 5 Aug 2010 18:41:42 +0000 (14:41 -0400)
commit56d35a4cd13e7bc5eca5b2dba5a41794afb17e11
tree8173b2de9f0f2b596812a725ac1897efa0ba38fc
parent0cfc9255a1efb0467de2162950197750570ecec0
ext4: Fix dirtying of journalled buffers in data=journal mode

In data=journal mode, we still use block_write_begin() to prepare
page for writing. This function can occasionally mark buffer dirty
which violates journalling assumptions - when a buffer is part of
a transaction, it should be dirty and a buffer can be already part
of a forget list of some transaction when block_write_begin()
gets called. This violation of journalling assumptions then results
in "JBD: Spotted dirty metadata buffer..." warnings.

In fact, temporary dirtying the buffer while the page is still locked
does not really cause problems to the journalling because we won't write
the buffer until the page gets unlocked. So we just have to make sure
to clear dirty bits before unlocking the page.

Signed-off-by: Jan Kara <jack@suse.cz>
fs/ext4/inode.c