[PATCH] ext3: fix nobh mode for chattr +j inodes

One can do "chattr +j" on a file to change its journalling mode. Fix
writeback mode with "nobh" handling for it.

Even though, we mount ext3 filesystem in writeback mode with "nobh" option,
some one can do "chattr +j" on a single file to force it to do journalled
mode. In order to do journaling, ext3_block_truncate_page() need to
fallback to default case of creating buffers and adding them to transaction
etc.

Signed-off-by: Badari Pulavarty <pbadari@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Badari Pulavarty and committed by Linus Torvalds cd6ef84e 0adb25d2

+8 -9
+8 -9
fs/ext3/inode.c
··· 1624 1624 * For "nobh" option, we can only work if we don't need to 1625 1625 * read-in the page - otherwise we create buffers to do the IO. 1626 1626 */ 1627 - if (!page_has_buffers(page) && test_opt(inode->i_sb, NOBH)) { 1628 - if (PageUptodate(page)) { 1629 - kaddr = kmap_atomic(page, KM_USER0); 1630 - memset(kaddr + offset, 0, length); 1631 - flush_dcache_page(page); 1632 - kunmap_atomic(kaddr, KM_USER0); 1633 - set_page_dirty(page); 1634 - goto unlock; 1635 - } 1627 + if (!page_has_buffers(page) && test_opt(inode->i_sb, NOBH) && 1628 + ext3_should_writeback_data(inode) && PageUptodate(page)) { 1629 + kaddr = kmap_atomic(page, KM_USER0); 1630 + memset(kaddr + offset, 0, length); 1631 + flush_dcache_page(page); 1632 + kunmap_atomic(kaddr, KM_USER0); 1633 + set_page_dirty(page); 1634 + goto unlock; 1636 1635 } 1637 1636 1638 1637 if (!page_has_buffers(page))