ext4: simplify calculation of blocks to free on error
authorTheodore Ts'o <tytso@mit.edu>
Mon, 15 Jul 2013 04:09:37 +0000 (00:09 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 15 Jul 2013 04:09:37 +0000 (00:09 -0400)
In ext4_ext_map_blocks(), if we have successfully allocated the data
blocks, but then run into trouble inserting the extent into the extent
tree, most likely due to an ENOSPC condition, determine the arguments
to ext4_free_blocks() in a simpler way which is easier to prove to be
correct.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/extents.c

index f57cc0e..5930915 100644 (file)
@@ -4261,8 +4261,8 @@ got_allocated_blocks:
                /* not a good idea to call discard here directly,
                 * but otherwise we'd need to call it every free() */
                ext4_discard_preallocations(inode);
-               ext4_free_blocks(handle, inode, NULL, ext4_ext_pblock(&newex),
-                                ext4_ext_get_actual_len(&newex), fb_flags);
+               ext4_free_blocks(handle, inode, NULL, newblock,
+                                EXT4_C2B(sbi, allocated_clusters), fb_flags);
                goto out2;
        }