aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/extent-tree.c48
1 files changed, 25 insertions, 23 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 0d0a3fe77bb7..b42efc2ded51 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -5218,9 +5218,7 @@ loop:
5218 * LOOP_NO_EMPTY_SIZE, set empty_size and empty_cluster to 0 and try 5218 * LOOP_NO_EMPTY_SIZE, set empty_size and empty_cluster to 0 and try
5219 * again 5219 * again
5220 */ 5220 */
5221 if (!ins->objectid && loop < LOOP_NO_EMPTY_SIZE && 5221 if (!ins->objectid && loop < LOOP_NO_EMPTY_SIZE) {
5222 (found_uncached_bg || empty_size || empty_cluster ||
5223 allowed_chunk_alloc)) {
5224 index = 0; 5222 index = 0;
5225 if (loop == LOOP_FIND_IDEAL && found_uncached_bg) { 5223 if (loop == LOOP_FIND_IDEAL && found_uncached_bg) {
5226 found_uncached_bg = false; 5224 found_uncached_bg = false;
@@ -5260,32 +5258,36 @@ loop:
5260 goto search; 5258 goto search;
5261 } 5259 }
5262 5260
5263 if (loop < LOOP_CACHING_WAIT) { 5261 loop++;
5264 loop++;
5265 goto search;
5266 }
5267 5262
5268 if (loop == LOOP_ALLOC_CHUNK) { 5263 if (loop == LOOP_ALLOC_CHUNK) {
5269 empty_size = 0; 5264 if (allowed_chunk_alloc) {
5270 empty_cluster = 0; 5265 ret = do_chunk_alloc(trans, root, num_bytes +
5271 } 5266 2 * 1024 * 1024, data,
5267 CHUNK_ALLOC_LIMITED);
5268 allowed_chunk_alloc = 0;
5269 if (ret == 1)
5270 done_chunk_alloc = 1;
5271 } else if (!done_chunk_alloc &&
5272 space_info->force_alloc ==
5273 CHUNK_ALLOC_NO_FORCE) {
5274 space_info->force_alloc = CHUNK_ALLOC_LIMITED;
5275 }
5272 5276
5273 if (allowed_chunk_alloc) { 5277 /*
5274 ret = do_chunk_alloc(trans, root, num_bytes + 5278 * We didn't allocate a chunk, go ahead and drop the
5275 2 * 1024 * 1024, data, 5279 * empty size and loop again.
5276 CHUNK_ALLOC_LIMITED); 5280 */
5277 allowed_chunk_alloc = 0; 5281 if (!done_chunk_alloc)
5278 done_chunk_alloc = 1; 5282 loop = LOOP_NO_EMPTY_SIZE;
5279 } else if (!done_chunk_alloc &&
5280 space_info->force_alloc == CHUNK_ALLOC_NO_FORCE) {
5281 space_info->force_alloc = CHUNK_ALLOC_LIMITED;
5282 } 5283 }
5283 5284
5284 if (loop < LOOP_NO_EMPTY_SIZE) { 5285 if (loop == LOOP_NO_EMPTY_SIZE) {
5285 loop++; 5286 empty_size = 0;
5286 goto search; 5287 empty_cluster = 0;
5287 } 5288 }
5288 ret = -ENOSPC; 5289
5290 goto search;
5289 } else if (!ins->objectid) { 5291 } else if (!ins->objectid) {
5290 ret = -ENOSPC; 5292 ret = -ENOSPC;
5291 } else if (ins->objectid) { 5293 } else if (ins->objectid) {