From 85a71d7ee7cc3e2b9909be5b90076cb782d121f5 Mon Sep 17 00:00:00 2001 From: Allison Henderson Date: Sun, 17 Jul 2011 23:17:02 -0400 Subject: [PATCH] --- yaml --- r: 262107 b: refs/heads/master c: f7d0d3797fac6cad24ad9f86dd9baf65c586b434 h: refs/heads/master i: 262105: 7532f6e60da51c8c4cf33a4447b450d3e02ada94 262103: ec39508321085b29365a1eabe1d5441f8d454561 v: v3 --- [refs] | 2 +- trunk/fs/ext4/extents.c | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 96a61c1b28f5..e8c7fbc25454 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3eb08658431abd65c0fe6855d1860859c2d416f7 +refs/heads/master: f7d0d3797fac6cad24ad9f86dd9baf65c586b434 diff --git a/trunk/fs/ext4/extents.c b/trunk/fs/ext4/extents.c index f1c538e5055c..06b30b61205f 100644 --- a/trunk/fs/ext4/extents.c +++ b/trunk/fs/ext4/extents.c @@ -3461,8 +3461,27 @@ int ext4_ext_map_blocks(handle_t *handle, struct inode *inode, ext4_ext_mark_uninitialized(ex); - err = ext4_ext_remove_space(inode, map->m_lblk, - map->m_lblk + punched_out); + ext4_ext_invalidate_cache(inode); + + err = ext4_ext_rm_leaf(handle, inode, path, + map->m_lblk, map->m_lblk + punched_out); + + if (!err && path->p_hdr->eh_entries == 0) { + /* + * Punch hole freed all of this sub tree, + * so we need to correct eh_depth + */ + err = ext4_ext_get_access(handle, inode, path); + if (err == 0) { + ext_inode_hdr(inode)->eh_depth = 0; + ext_inode_hdr(inode)->eh_max = + cpu_to_le16(ext4_ext_space_root( + inode, 0)); + + err = ext4_ext_dirty( + handle, inode, path); + } + } goto out2; }