diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 8d62200..023e1a8 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -1790,6 +1790,13 @@ static void mpage_da_map_blocks(struct mpage_da_data *mpd) new.b_state = lbh->b_state; new.b_blocknr = 0; new.b_size = lbh->b_size; + + /* + * If we didn't accumulate anything + * to write simply return + */ + if (!new.b_size) + return; err = mpd->get_block(mpd->inode, next, &new, 1); if (err) return; diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 25adfc3..a7db10c 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -517,8 +517,12 @@ void generic_sync_sb_inodes(struct super_block *sb, cond_resched(); spin_lock(&inode_lock); if (wbc->nr_to_write <= 0) { - wbc->more_io = 1; - break; + if (wbc->sync_mode == WB_SYNC_ALL) { + wbc->nr_to_write = LONG_MAX; + } else { + wbc->more_io = 1; + break; + } } if (!list_empty(&sb->s_more_io)) wbc->more_io = 1;