]> git.karo-electronics.de Git - linux-beck.git/commitdiff
Btrfs: Fix duplicate ENOSPC checks in find_free_extent
authorChris Mason <chris.mason@oracle.com>
Mon, 17 Sep 2007 15:00:51 +0000 (11:00 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:03:56 +0000 (11:03 -0400)
find_free_extent would fail to wrap around to the start of the drive because
it was doing the enospc case checking twice in some cases, causing it
to return -ENOSPC early.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/extent-tree.c

index fe772f9b06cf09fd4b6c730307e7fe3478f8697f..f261a8326cdf6825bdf2fab461ca43f894ecdca8 100644 (file)
@@ -1111,20 +1111,9 @@ check_pending:
        btrfs_release_path(root, path);
        BUG_ON(ins->objectid < search_start);
 
-       if (ins->objectid + num_blocks >= search_end) {
-               if (full_scan) {
-                       ret = -ENOSPC;
-                       goto error;
-               }
-               search_start = orig_search_start;
-               if (wrapped) {
-                       if (!full_scan)
-                               total_needed -= empty_size;
-                       full_scan = 1;
-               } else
-                       wrapped = 1;
-               goto new_group;
-       }
+       if (ins->objectid + num_blocks >= search_end)
+               goto enospc;
+
        for (test_block = ins->objectid;
             test_block < ins->objectid + num_blocks; test_block++) {
                if (test_radix_bit(&info->pinned_radix, test_block) ||
@@ -1149,6 +1138,7 @@ check_pending:
 
 new_group:
        if (search_start + num_blocks >= search_end) {
+enospc:
                search_start = orig_search_start;
                if (full_scan) {
                        ret = -ENOSPC;