|
@@ -1521,12 +1521,16 @@ static int ext3_ordered_writepage(struct page *page,
|
|
if (!page_has_buffers(page)) {
|
|
if (!page_has_buffers(page)) {
|
|
create_empty_buffers(page, inode->i_sb->s_blocksize,
|
|
create_empty_buffers(page, inode->i_sb->s_blocksize,
|
|
(1 << BH_Dirty)|(1 << BH_Uptodate));
|
|
(1 << BH_Dirty)|(1 << BH_Uptodate));
|
|
- } else if (!walk_page_buffers(NULL, page_buffers(page), 0, PAGE_CACHE_SIZE, NULL, buffer_unmapped)) {
|
|
|
|
- /* Provide NULL instead of get_block so that we catch bugs if buffers weren't really mapped */
|
|
|
|
- return block_write_full_page(page, NULL, wbc);
|
|
|
|
|
|
+ page_bufs = page_buffers(page);
|
|
|
|
+ } else {
|
|
|
|
+ page_bufs = page_buffers(page);
|
|
|
|
+ if (!walk_page_buffers(NULL, page_bufs, 0, PAGE_CACHE_SIZE,
|
|
|
|
+ NULL, buffer_unmapped)) {
|
|
|
|
+ /* Provide NULL get_block() to catch bugs if buffers
|
|
|
|
+ * weren't really mapped */
|
|
|
|
+ return block_write_full_page(page, NULL, wbc);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- page_bufs = page_buffers(page);
|
|
|
|
-
|
|
|
|
handle = ext3_journal_start(inode, ext3_writepage_trans_blocks(inode));
|
|
handle = ext3_journal_start(inode, ext3_writepage_trans_blocks(inode));
|
|
|
|
|
|
if (IS_ERR(handle)) {
|
|
if (IS_ERR(handle)) {
|
|
@@ -1581,6 +1585,15 @@ static int ext3_writeback_writepage(struct page *page,
|
|
if (ext3_journal_current_handle())
|
|
if (ext3_journal_current_handle())
|
|
goto out_fail;
|
|
goto out_fail;
|
|
|
|
|
|
|
|
+ if (page_has_buffers(page)) {
|
|
|
|
+ if (!walk_page_buffers(NULL, page_buffers(page), 0,
|
|
|
|
+ PAGE_CACHE_SIZE, NULL, buffer_unmapped)) {
|
|
|
|
+ /* Provide NULL get_block() to catch bugs if buffers
|
|
|
|
+ * weren't really mapped */
|
|
|
|
+ return block_write_full_page(page, NULL, wbc);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
handle = ext3_journal_start(inode, ext3_writepage_trans_blocks(inode));
|
|
handle = ext3_journal_start(inode, ext3_writepage_trans_blocks(inode));
|
|
if (IS_ERR(handle)) {
|
|
if (IS_ERR(handle)) {
|
|
ret = PTR_ERR(handle);
|
|
ret = PTR_ERR(handle);
|