udf: Do not decrement i_blocks when freeing indirect extent block
authorJan Kara <jack@suse.cz>
Mon, 9 Jul 2012 11:24:21 +0000 (13:24 +0200)
committerJan Kara <jack@suse.cz>
Mon, 9 Jul 2012 11:24:21 +0000 (13:24 +0200)
Indirect extent block is not accounted in i_blocks during allocation
thus we should not decrement i_blocks when we are freeing such block
during truncation.

Reported-by: Steve Nickel <snickel58@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/udf/truncate.c

index 4b98fee..8a9657d 100644 (file)
@@ -248,7 +248,7 @@ void udf_truncate_extents(struct inode *inode)
                                /* We managed to free all extents in the
                                 * indirect extent - free it too */
                                BUG_ON(!epos.bh);
-                               udf_free_blocks(sb, inode, &epos.block,
+                               udf_free_blocks(sb, NULL, &epos.block,
                                                0, indirect_ext_len);
                        } else if (!epos.bh) {
                                iinfo->i_lenAlloc = lenalloc;
@@ -275,7 +275,7 @@ void udf_truncate_extents(struct inode *inode)
 
        if (indirect_ext_len) {
                BUG_ON(!epos.bh);
-               udf_free_blocks(sb, inode, &epos.block, 0, indirect_ext_len);
+               udf_free_blocks(sb, NULL, &epos.block, 0, indirect_ext_len);
        } else if (!epos.bh) {
                iinfo->i_lenAlloc = lenalloc;
                mark_inode_dirty(inode);