1 ext4: add WARN_ON on unmapped dirty buffer_heads in writepage
3 From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
5 Now that block_lock_hole_extend() clears the dirty flag of
6 buffer_heads outside i_size we should not find buffer_heads which are
7 unmapped and dirty in writepage. If we find do a WARN_ON. We can
8 still continue because block_write_full page look at the mapped flag
11 Following sequence of events would result in the above condition.
18 After step 3 we would have unmapped buffer_heads outside i_size.
19 After step 4 we would have unmapped buffer_heads within i_size.
21 Now that truncate is calling block_lock_hole_extend which in turn
22 is clearing the dirty flag, we can safely assume that we won't
23 find unmapped dirty buffer_heads in write page. If we did find one
24 we should find out why.
26 Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
27 Acked-by: Jan Kara <jack@suse.cz>
28 Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
30 fs/ext4/inode.c | 12 ++++++++++++
31 1 files changed, 12 insertions(+), 0 deletions(-)
33 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
34 index 2219daa..9bba474 100644
37 @@ -2488,6 +2488,10 @@ static int __ext4_journalled_writepage(struct page *page,
41 +static int ext4_bh_unmapped_and_dirty(handle_t *handle, struct buffer_head *bh)
43 + return !buffer_mapped(bh) && buffer_dirty(bh);
47 * Note that we don't need to start a transaction unless we're journaling data
48 @@ -2602,6 +2606,14 @@ static int ext4_writepage(struct page *page,
49 /* now mark the buffer_heads as dirty and uptodate */
50 block_commit_write(page, 0, len);
53 + * There should not be any unmapped and dirty
54 + * buffer_heads at this point. Look at block_lock_hole_extend
55 + * for more info. If we find one print more info
57 + WARN(walk_page_buffers(NULL, page_bufs, 0, len, NULL,
58 + ext4_bh_unmapped_and_dirty),
59 + "Unmapped dirty buffer_heads found in %s\n", __func__);
61 if (PageChecked(page) && ext4_should_journal_data(inode)) {
67 To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
68 the body of a message to majordomo@vger.kernel.org
69 More majordomo info at http://vger.kernel.org/majordomo-info.html