From patchwork Sat Dec 31 01:35:39 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: ext4: teach ext4_free_blocks to handle multi journalled data blocks Date: Fri, 30 Dec 2011 15:35:39 -0000 From: Yongqiang Yang X-Patchwork-Id: 133729 Message-Id: <1325295339-6268-1-git-send-email-xiaoqiangnk@gmail.com> To: tytso@mit.edu Cc: linux-ext4@vger.kernel.org, Yongqiang Yang This patch makes ext4_free_blocks work well with multi journaled data blocks. Consider that journal mode of a file is changed from ordered mode to jounral mode, then ext4_free_blocks() should record data blocks in revoke table. ext4 with journal mode also needs ext4_free_blocks() to record data blocks in revoke table. Signed-off-by: Yongqiang Yang --- fs/ext4/mballoc.c | 8 +++----- 1 files changed, 3 insertions(+), 5 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index cb990b2..46f5a24 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -4562,19 +4562,17 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode, trace_ext4_free_blocks(inode, block, count, flags); if (flags & EXT4_FREE_BLOCKS_FORGET) { - struct buffer_head *tbh = bh; int i; BUG_ON(bh && (count > 1)); for (i = 0; i < count; i++) { if (!bh) - tbh = sb_find_get_block(inode->i_sb, + bh = sb_find_get_block(inode->i_sb, block + i); - if (unlikely(!tbh)) - continue; ext4_forget(handle, flags & EXT4_FREE_BLOCKS_METADATA, - inode, tbh, block + i); + inode, bh, block + i); + bh = NULL; } }