OSDN Git Service

Fix ext2fs_extent_set_bmap() when setting a block before the first extent
authorTheodore Ts'o <tytso@mit.edu>
Fri, 22 Aug 2008 06:32:28 +0000 (02:32 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 22 Aug 2008 06:43:05 +0000 (02:43 -0400)
When setting a logical block which is before the first extent in the
extent tree, make sure the new extent goes in front, at the very
beginning of the extent tree.  This fixes a bug where previously the
new extent would be inserted out of order in this case.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/ext2fs/extent.c

index 45c3dc8..3df3092 100644 (file)
@@ -1203,7 +1203,9 @@ errcode_t ext2fs_extent_set_bmap(ext2_extent_handle_t handle,
                    ((int) extent.e_len < max_len-1)) {
                        extent.e_len++;
                        retval = ext2fs_extent_replace(handle, 0, &extent);
-               } else
+               } else if (logical < extent.e_lblk)
+                       retval = ext2fs_extent_insert(handle, 0, &newextent);
+               else
                        retval = ext2fs_extent_insert(handle,
                                      EXT2_EXTENT_INSERT_AFTER, &newextent);
                if (retval)