From 0f633be76ab1768c091956d9e43a46872ec9541e Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Mon, 23 Nov 2009 07:17:34 -0500 Subject: [PATCH] --- yaml --- r: 174371 b: refs/heads/master c: 50689696867d95b38d9c7be640a311494a04fb86 h: refs/heads/master i: 174369: 7be49db0fb97ecffeaa83d25ee4addbc130a1829 174367: 4b6b959a72be196b1357e2a6e224dfc5da172f66 v: v3 --- [refs] | 2 +- trunk/fs/ext4/extents.c | 2 +- trunk/fs/ext4/inode.c | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 1d8ba1638420..4188d7badda6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: beac2da7565e42be59963824899825d0cc624295 +refs/heads/master: 50689696867d95b38d9c7be640a311494a04fb86 diff --git a/trunk/fs/ext4/extents.c b/trunk/fs/ext4/extents.c index 715264b4bae4..74dcff84c3a8 100644 --- a/trunk/fs/ext4/extents.c +++ b/trunk/fs/ext4/extents.c @@ -2074,7 +2074,7 @@ static int ext4_remove_blocks(handle_t *handle, struct inode *inode, ext_debug("free last %u blocks starting %llu\n", num, start); for (i = 0; i < num; i++) { bh = sb_find_get_block(inode->i_sb, start + i); - ext4_forget(handle, 0, inode, bh, start + i); + ext4_forget(handle, metadata, inode, bh, start + i); } ext4_free_blocks(handle, inode, start, num, metadata); } else if (from == le32_to_cpu(ex->ee_block) diff --git a/trunk/fs/ext4/inode.c b/trunk/fs/ext4/inode.c index 13de1dd751f5..c420aaba6e9c 100644 --- a/trunk/fs/ext4/inode.c +++ b/trunk/fs/ext4/inode.c @@ -4121,6 +4121,8 @@ static void ext4_clear_blocks(handle_t *handle, struct inode *inode, __le32 *last) { __le32 *p; + int is_metadata = S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode); + if (try_to_extend_transaction(handle, inode)) { if (bh) { BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata"); @@ -4151,11 +4153,11 @@ static void ext4_clear_blocks(handle_t *handle, struct inode *inode, *p = 0; tbh = sb_find_get_block(inode->i_sb, nr); - ext4_forget(handle, 0, inode, tbh, nr); + ext4_forget(handle, is_metadata, inode, tbh, nr); } } - ext4_free_blocks(handle, inode, block_to_free, count, 0); + ext4_free_blocks(handle, inode, block_to_free, count, is_metadata); } /**