diff options
author | Chris Mason <chris.mason@oracle.com> | 2007-09-17 11:00:51 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-09-25 11:03:56 -0400 |
commit | cf67582bb2ec364d71b3e4f8e49de98d8c3c832e (patch) | |
tree | 9f51995b1877953c9d15eee72d44881e6c4962bc | |
parent | d3c2fdcf7b79079f60ac64e61d886964d4647910 (diff) | |
download | kernel_goldelico_gta04-cf67582bb2ec364d71b3e4f8e49de98d8c3c832e.zip kernel_goldelico_gta04-cf67582bb2ec364d71b3e4f8e49de98d8c3c832e.tar.gz kernel_goldelico_gta04-cf67582bb2ec364d71b3e4f8e49de98d8c3c832e.tar.bz2 |
Btrfs: Fix duplicate ENOSPC checks in find_free_extent
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>
-rw-r--r-- | fs/btrfs/extent-tree.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index fe772f9..f261a83 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -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; |