ext4: Fix delalloc release block reservation for truncate
authorMingming Cao <cmm@us.ibm.com>
Wed, 20 Aug 2008 02:16:59 +0000 (22:16 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 20 Aug 2008 02:16:59 +0000 (22:16 -0400)
commitcd21322616c3af265d39bf15321d436e667a5dd1
tree2e293b838191785a0ecf3b19f204731c73589139
parentb4df2030858bde986cb6ff2e4b45945f84649e32
ext4: Fix delalloc release block reservation for truncate

Ext4 will release the reserved blocks for delayed allocations when
inode is truncated/unlinked.  If there is no reserved block at all, we
shouldn't need to do so.  But current code still tries to release the
reserved blocks regardless whether the counters's value is 0.
Continue to do that causes the later calculation to go wrong and a
kernel BUG_ON() caught that. This doesn't happen for extent-based
files, as the calculation for 0 reserved blocks was right for extent
based file.

This patch fixed the kernel BUG() due to above reason.  It adds checks
for 0 to avoid unnecessary release and fix calculation for non-extent
files.

Signed-off-by: Mingming Cao <cmm@us.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/inode.c