0001
0002
0003 #include <linux/list_sort.h>
0004 #include "misc.h"
0005 #include "ctree.h"
0006 #include "block-group.h"
0007 #include "space-info.h"
0008 #include "disk-io.h"
0009 #include "free-space-cache.h"
0010 #include "free-space-tree.h"
0011 #include "volumes.h"
0012 #include "transaction.h"
0013 #include "ref-verify.h"
0014 #include "sysfs.h"
0015 #include "tree-log.h"
0016 #include "delalloc-space.h"
0017 #include "discard.h"
0018 #include "raid56.h"
0019 #include "zoned.h"
0020
0021
0022
0023
0024
0025
0026
0027 static u64 get_restripe_target(struct btrfs_fs_info *fs_info, u64 flags)
0028 {
0029 struct btrfs_balance_control *bctl = fs_info->balance_ctl;
0030 u64 target = 0;
0031
0032 if (!bctl)
0033 return 0;
0034
0035 if (flags & BTRFS_BLOCK_GROUP_DATA &&
0036 bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) {
0037 target = BTRFS_BLOCK_GROUP_DATA | bctl->data.target;
0038 } else if (flags & BTRFS_BLOCK_GROUP_SYSTEM &&
0039 bctl->sys.flags & BTRFS_BALANCE_ARGS_CONVERT) {
0040 target = BTRFS_BLOCK_GROUP_SYSTEM | bctl->sys.target;
0041 } else if (flags & BTRFS_BLOCK_GROUP_METADATA &&
0042 bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT) {
0043 target = BTRFS_BLOCK_GROUP_METADATA | bctl->meta.target;
0044 }
0045
0046 return target;
0047 }
0048
0049
0050
0051
0052
0053
0054
0055
0056 static u64 btrfs_reduce_alloc_profile(struct btrfs_fs_info *fs_info, u64 flags)
0057 {
0058 u64 num_devices = fs_info->fs_devices->rw_devices;
0059 u64 target;
0060 u64 raid_type;
0061 u64 allowed = 0;
0062
0063
0064
0065
0066
0067 spin_lock(&fs_info->balance_lock);
0068 target = get_restripe_target(fs_info, flags);
0069 if (target) {
0070 spin_unlock(&fs_info->balance_lock);
0071 return extended_to_chunk(target);
0072 }
0073 spin_unlock(&fs_info->balance_lock);
0074
0075
0076 for (raid_type = 0; raid_type < BTRFS_NR_RAID_TYPES; raid_type++) {
0077 if (num_devices >= btrfs_raid_array[raid_type].devs_min)
0078 allowed |= btrfs_raid_array[raid_type].bg_flag;
0079 }
0080 allowed &= flags;
0081
0082 if (allowed & BTRFS_BLOCK_GROUP_RAID6)
0083 allowed = BTRFS_BLOCK_GROUP_RAID6;
0084 else if (allowed & BTRFS_BLOCK_GROUP_RAID5)
0085 allowed = BTRFS_BLOCK_GROUP_RAID5;
0086 else if (allowed & BTRFS_BLOCK_GROUP_RAID10)
0087 allowed = BTRFS_BLOCK_GROUP_RAID10;
0088 else if (allowed & BTRFS_BLOCK_GROUP_RAID1)
0089 allowed = BTRFS_BLOCK_GROUP_RAID1;
0090 else if (allowed & BTRFS_BLOCK_GROUP_RAID0)
0091 allowed = BTRFS_BLOCK_GROUP_RAID0;
0092
0093 flags &= ~BTRFS_BLOCK_GROUP_PROFILE_MASK;
0094
0095 return extended_to_chunk(flags | allowed);
0096 }
0097
0098 u64 btrfs_get_alloc_profile(struct btrfs_fs_info *fs_info, u64 orig_flags)
0099 {
0100 unsigned seq;
0101 u64 flags;
0102
0103 do {
0104 flags = orig_flags;
0105 seq = read_seqbegin(&fs_info->profiles_lock);
0106
0107 if (flags & BTRFS_BLOCK_GROUP_DATA)
0108 flags |= fs_info->avail_data_alloc_bits;
0109 else if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
0110 flags |= fs_info->avail_system_alloc_bits;
0111 else if (flags & BTRFS_BLOCK_GROUP_METADATA)
0112 flags |= fs_info->avail_metadata_alloc_bits;
0113 } while (read_seqretry(&fs_info->profiles_lock, seq));
0114
0115 return btrfs_reduce_alloc_profile(fs_info, flags);
0116 }
0117
0118 void btrfs_get_block_group(struct btrfs_block_group *cache)
0119 {
0120 refcount_inc(&cache->refs);
0121 }
0122
0123 void btrfs_put_block_group(struct btrfs_block_group *cache)
0124 {
0125 if (refcount_dec_and_test(&cache->refs)) {
0126 WARN_ON(cache->pinned > 0);
0127
0128
0129
0130
0131
0132
0133
0134 if (!(cache->flags & BTRFS_BLOCK_GROUP_METADATA) ||
0135 !BTRFS_FS_LOG_CLEANUP_ERROR(cache->fs_info))
0136 WARN_ON(cache->reserved > 0);
0137
0138
0139
0140
0141
0142
0143 if (WARN_ON(!list_empty(&cache->discard_list)))
0144 btrfs_discard_cancel_work(&cache->fs_info->discard_ctl,
0145 cache);
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155 WARN_ON(!RB_EMPTY_ROOT(&cache->full_stripe_locks_root.root));
0156 kfree(cache->free_space_ctl);
0157 kfree(cache->physical_map);
0158 kfree(cache);
0159 }
0160 }
0161
0162
0163
0164
0165 static int btrfs_add_block_group_cache(struct btrfs_fs_info *info,
0166 struct btrfs_block_group *block_group)
0167 {
0168 struct rb_node **p;
0169 struct rb_node *parent = NULL;
0170 struct btrfs_block_group *cache;
0171 bool leftmost = true;
0172
0173 ASSERT(block_group->length != 0);
0174
0175 write_lock(&info->block_group_cache_lock);
0176 p = &info->block_group_cache_tree.rb_root.rb_node;
0177
0178 while (*p) {
0179 parent = *p;
0180 cache = rb_entry(parent, struct btrfs_block_group, cache_node);
0181 if (block_group->start < cache->start) {
0182 p = &(*p)->rb_left;
0183 } else if (block_group->start > cache->start) {
0184 p = &(*p)->rb_right;
0185 leftmost = false;
0186 } else {
0187 write_unlock(&info->block_group_cache_lock);
0188 return -EEXIST;
0189 }
0190 }
0191
0192 rb_link_node(&block_group->cache_node, parent, p);
0193 rb_insert_color_cached(&block_group->cache_node,
0194 &info->block_group_cache_tree, leftmost);
0195
0196 write_unlock(&info->block_group_cache_lock);
0197
0198 return 0;
0199 }
0200
0201
0202
0203
0204
0205 static struct btrfs_block_group *block_group_cache_tree_search(
0206 struct btrfs_fs_info *info, u64 bytenr, int contains)
0207 {
0208 struct btrfs_block_group *cache, *ret = NULL;
0209 struct rb_node *n;
0210 u64 end, start;
0211
0212 read_lock(&info->block_group_cache_lock);
0213 n = info->block_group_cache_tree.rb_root.rb_node;
0214
0215 while (n) {
0216 cache = rb_entry(n, struct btrfs_block_group, cache_node);
0217 end = cache->start + cache->length - 1;
0218 start = cache->start;
0219
0220 if (bytenr < start) {
0221 if (!contains && (!ret || start < ret->start))
0222 ret = cache;
0223 n = n->rb_left;
0224 } else if (bytenr > start) {
0225 if (contains && bytenr <= end) {
0226 ret = cache;
0227 break;
0228 }
0229 n = n->rb_right;
0230 } else {
0231 ret = cache;
0232 break;
0233 }
0234 }
0235 if (ret)
0236 btrfs_get_block_group(ret);
0237 read_unlock(&info->block_group_cache_lock);
0238
0239 return ret;
0240 }
0241
0242
0243
0244
0245 struct btrfs_block_group *btrfs_lookup_first_block_group(
0246 struct btrfs_fs_info *info, u64 bytenr)
0247 {
0248 return block_group_cache_tree_search(info, bytenr, 0);
0249 }
0250
0251
0252
0253
0254 struct btrfs_block_group *btrfs_lookup_block_group(
0255 struct btrfs_fs_info *info, u64 bytenr)
0256 {
0257 return block_group_cache_tree_search(info, bytenr, 1);
0258 }
0259
0260 struct btrfs_block_group *btrfs_next_block_group(
0261 struct btrfs_block_group *cache)
0262 {
0263 struct btrfs_fs_info *fs_info = cache->fs_info;
0264 struct rb_node *node;
0265
0266 read_lock(&fs_info->block_group_cache_lock);
0267
0268
0269 if (RB_EMPTY_NODE(&cache->cache_node)) {
0270 const u64 next_bytenr = cache->start + cache->length;
0271
0272 read_unlock(&fs_info->block_group_cache_lock);
0273 btrfs_put_block_group(cache);
0274 return btrfs_lookup_first_block_group(fs_info, next_bytenr);
0275 }
0276 node = rb_next(&cache->cache_node);
0277 btrfs_put_block_group(cache);
0278 if (node) {
0279 cache = rb_entry(node, struct btrfs_block_group, cache_node);
0280 btrfs_get_block_group(cache);
0281 } else
0282 cache = NULL;
0283 read_unlock(&fs_info->block_group_cache_lock);
0284 return cache;
0285 }
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302 struct btrfs_block_group *btrfs_inc_nocow_writers(struct btrfs_fs_info *fs_info,
0303 u64 bytenr)
0304 {
0305 struct btrfs_block_group *bg;
0306 bool can_nocow = true;
0307
0308 bg = btrfs_lookup_block_group(fs_info, bytenr);
0309 if (!bg)
0310 return NULL;
0311
0312 spin_lock(&bg->lock);
0313 if (bg->ro)
0314 can_nocow = false;
0315 else
0316 atomic_inc(&bg->nocow_writers);
0317 spin_unlock(&bg->lock);
0318
0319 if (!can_nocow) {
0320 btrfs_put_block_group(bg);
0321 return NULL;
0322 }
0323
0324
0325 return bg;
0326 }
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341 void btrfs_dec_nocow_writers(struct btrfs_block_group *bg)
0342 {
0343 if (atomic_dec_and_test(&bg->nocow_writers))
0344 wake_up_var(&bg->nocow_writers);
0345
0346
0347 btrfs_put_block_group(bg);
0348 }
0349
0350 void btrfs_wait_nocow_writers(struct btrfs_block_group *bg)
0351 {
0352 wait_var_event(&bg->nocow_writers, !atomic_read(&bg->nocow_writers));
0353 }
0354
0355 void btrfs_dec_block_group_reservations(struct btrfs_fs_info *fs_info,
0356 const u64 start)
0357 {
0358 struct btrfs_block_group *bg;
0359
0360 bg = btrfs_lookup_block_group(fs_info, start);
0361 ASSERT(bg);
0362 if (atomic_dec_and_test(&bg->reservations))
0363 wake_up_var(&bg->reservations);
0364 btrfs_put_block_group(bg);
0365 }
0366
0367 void btrfs_wait_block_group_reservations(struct btrfs_block_group *bg)
0368 {
0369 struct btrfs_space_info *space_info = bg->space_info;
0370
0371 ASSERT(bg->ro);
0372
0373 if (!(bg->flags & BTRFS_BLOCK_GROUP_DATA))
0374 return;
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386 down_write(&space_info->groups_sem);
0387 up_write(&space_info->groups_sem);
0388
0389 wait_var_event(&bg->reservations, !atomic_read(&bg->reservations));
0390 }
0391
0392 struct btrfs_caching_control *btrfs_get_caching_control(
0393 struct btrfs_block_group *cache)
0394 {
0395 struct btrfs_caching_control *ctl;
0396
0397 spin_lock(&cache->lock);
0398 if (!cache->caching_ctl) {
0399 spin_unlock(&cache->lock);
0400 return NULL;
0401 }
0402
0403 ctl = cache->caching_ctl;
0404 refcount_inc(&ctl->count);
0405 spin_unlock(&cache->lock);
0406 return ctl;
0407 }
0408
0409 void btrfs_put_caching_control(struct btrfs_caching_control *ctl)
0410 {
0411 if (refcount_dec_and_test(&ctl->count))
0412 kfree(ctl);
0413 }
0414
0415
0416
0417
0418
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428 void btrfs_wait_block_group_cache_progress(struct btrfs_block_group *cache,
0429 u64 num_bytes)
0430 {
0431 struct btrfs_caching_control *caching_ctl;
0432
0433 caching_ctl = btrfs_get_caching_control(cache);
0434 if (!caching_ctl)
0435 return;
0436
0437 wait_event(caching_ctl->wait, btrfs_block_group_done(cache) ||
0438 (cache->free_space_ctl->free_space >= num_bytes));
0439
0440 btrfs_put_caching_control(caching_ctl);
0441 }
0442
0443 static int btrfs_caching_ctl_wait_done(struct btrfs_block_group *cache,
0444 struct btrfs_caching_control *caching_ctl)
0445 {
0446 wait_event(caching_ctl->wait, btrfs_block_group_done(cache));
0447 return cache->cached == BTRFS_CACHE_ERROR ? -EIO : 0;
0448 }
0449
0450 static int btrfs_wait_block_group_cache_done(struct btrfs_block_group *cache)
0451 {
0452 struct btrfs_caching_control *caching_ctl;
0453 int ret;
0454
0455 caching_ctl = btrfs_get_caching_control(cache);
0456 if (!caching_ctl)
0457 return (cache->cached == BTRFS_CACHE_ERROR) ? -EIO : 0;
0458 ret = btrfs_caching_ctl_wait_done(cache, caching_ctl);
0459 btrfs_put_caching_control(caching_ctl);
0460 return ret;
0461 }
0462
0463 #ifdef CONFIG_BTRFS_DEBUG
0464 static void fragment_free_space(struct btrfs_block_group *block_group)
0465 {
0466 struct btrfs_fs_info *fs_info = block_group->fs_info;
0467 u64 start = block_group->start;
0468 u64 len = block_group->length;
0469 u64 chunk = block_group->flags & BTRFS_BLOCK_GROUP_METADATA ?
0470 fs_info->nodesize : fs_info->sectorsize;
0471 u64 step = chunk << 1;
0472
0473 while (len > chunk) {
0474 btrfs_remove_free_space(block_group, start, chunk);
0475 start += step;
0476 if (len < step)
0477 len = 0;
0478 else
0479 len -= step;
0480 }
0481 }
0482 #endif
0483
0484
0485
0486
0487
0488
0489
0490 u64 add_new_free_space(struct btrfs_block_group *block_group, u64 start, u64 end)
0491 {
0492 struct btrfs_fs_info *info = block_group->fs_info;
0493 u64 extent_start, extent_end, size, total_added = 0;
0494 int ret;
0495
0496 while (start < end) {
0497 ret = find_first_extent_bit(&info->excluded_extents, start,
0498 &extent_start, &extent_end,
0499 EXTENT_DIRTY | EXTENT_UPTODATE,
0500 NULL);
0501 if (ret)
0502 break;
0503
0504 if (extent_start <= start) {
0505 start = extent_end + 1;
0506 } else if (extent_start > start && extent_start < end) {
0507 size = extent_start - start;
0508 total_added += size;
0509 ret = btrfs_add_free_space_async_trimmed(block_group,
0510 start, size);
0511 BUG_ON(ret);
0512 start = extent_end + 1;
0513 } else {
0514 break;
0515 }
0516 }
0517
0518 if (start < end) {
0519 size = end - start;
0520 total_added += size;
0521 ret = btrfs_add_free_space_async_trimmed(block_group, start,
0522 size);
0523 BUG_ON(ret);
0524 }
0525
0526 return total_added;
0527 }
0528
0529 static int load_extent_tree_free(struct btrfs_caching_control *caching_ctl)
0530 {
0531 struct btrfs_block_group *block_group = caching_ctl->block_group;
0532 struct btrfs_fs_info *fs_info = block_group->fs_info;
0533 struct btrfs_root *extent_root;
0534 struct btrfs_path *path;
0535 struct extent_buffer *leaf;
0536 struct btrfs_key key;
0537 u64 total_found = 0;
0538 u64 last = 0;
0539 u32 nritems;
0540 int ret;
0541 bool wakeup = true;
0542
0543 path = btrfs_alloc_path();
0544 if (!path)
0545 return -ENOMEM;
0546
0547 last = max_t(u64, block_group->start, BTRFS_SUPER_INFO_OFFSET);
0548 extent_root = btrfs_extent_root(fs_info, last);
0549
0550 #ifdef CONFIG_BTRFS_DEBUG
0551
0552
0553
0554
0555
0556 if (btrfs_should_fragment_free_space(block_group))
0557 wakeup = false;
0558 #endif
0559
0560
0561
0562
0563
0564
0565 path->skip_locking = 1;
0566 path->search_commit_root = 1;
0567 path->reada = READA_FORWARD;
0568
0569 key.objectid = last;
0570 key.offset = 0;
0571 key.type = BTRFS_EXTENT_ITEM_KEY;
0572
0573 next:
0574 ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);
0575 if (ret < 0)
0576 goto out;
0577
0578 leaf = path->nodes[0];
0579 nritems = btrfs_header_nritems(leaf);
0580
0581 while (1) {
0582 if (btrfs_fs_closing(fs_info) > 1) {
0583 last = (u64)-1;
0584 break;
0585 }
0586
0587 if (path->slots[0] < nritems) {
0588 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
0589 } else {
0590 ret = btrfs_find_next_key(extent_root, path, &key, 0, 0);
0591 if (ret)
0592 break;
0593
0594 if (need_resched() ||
0595 rwsem_is_contended(&fs_info->commit_root_sem)) {
0596 if (wakeup)
0597 caching_ctl->progress = last;
0598 btrfs_release_path(path);
0599 up_read(&fs_info->commit_root_sem);
0600 mutex_unlock(&caching_ctl->mutex);
0601 cond_resched();
0602 mutex_lock(&caching_ctl->mutex);
0603 down_read(&fs_info->commit_root_sem);
0604 goto next;
0605 }
0606
0607 ret = btrfs_next_leaf(extent_root, path);
0608 if (ret < 0)
0609 goto out;
0610 if (ret)
0611 break;
0612 leaf = path->nodes[0];
0613 nritems = btrfs_header_nritems(leaf);
0614 continue;
0615 }
0616
0617 if (key.objectid < last) {
0618 key.objectid = last;
0619 key.offset = 0;
0620 key.type = BTRFS_EXTENT_ITEM_KEY;
0621
0622 if (wakeup)
0623 caching_ctl->progress = last;
0624 btrfs_release_path(path);
0625 goto next;
0626 }
0627
0628 if (key.objectid < block_group->start) {
0629 path->slots[0]++;
0630 continue;
0631 }
0632
0633 if (key.objectid >= block_group->start + block_group->length)
0634 break;
0635
0636 if (key.type == BTRFS_EXTENT_ITEM_KEY ||
0637 key.type == BTRFS_METADATA_ITEM_KEY) {
0638 total_found += add_new_free_space(block_group, last,
0639 key.objectid);
0640 if (key.type == BTRFS_METADATA_ITEM_KEY)
0641 last = key.objectid +
0642 fs_info->nodesize;
0643 else
0644 last = key.objectid + key.offset;
0645
0646 if (total_found > CACHING_CTL_WAKE_UP) {
0647 total_found = 0;
0648 if (wakeup)
0649 wake_up(&caching_ctl->wait);
0650 }
0651 }
0652 path->slots[0]++;
0653 }
0654 ret = 0;
0655
0656 total_found += add_new_free_space(block_group, last,
0657 block_group->start + block_group->length);
0658 caching_ctl->progress = (u64)-1;
0659
0660 out:
0661 btrfs_free_path(path);
0662 return ret;
0663 }
0664
0665 static noinline void caching_thread(struct btrfs_work *work)
0666 {
0667 struct btrfs_block_group *block_group;
0668 struct btrfs_fs_info *fs_info;
0669 struct btrfs_caching_control *caching_ctl;
0670 int ret;
0671
0672 caching_ctl = container_of(work, struct btrfs_caching_control, work);
0673 block_group = caching_ctl->block_group;
0674 fs_info = block_group->fs_info;
0675
0676 mutex_lock(&caching_ctl->mutex);
0677 down_read(&fs_info->commit_root_sem);
0678
0679 if (btrfs_test_opt(fs_info, SPACE_CACHE)) {
0680 ret = load_free_space_cache(block_group);
0681 if (ret == 1) {
0682 ret = 0;
0683 goto done;
0684 }
0685
0686
0687
0688
0689
0690 spin_lock(&block_group->lock);
0691 block_group->cached = BTRFS_CACHE_STARTED;
0692 spin_unlock(&block_group->lock);
0693 wake_up(&caching_ctl->wait);
0694 }
0695
0696
0697
0698
0699
0700
0701
0702
0703 if (btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE) &&
0704 !(test_bit(BTRFS_FS_FREE_SPACE_TREE_UNTRUSTED, &fs_info->flags)))
0705 ret = load_free_space_tree(caching_ctl);
0706 else
0707 ret = load_extent_tree_free(caching_ctl);
0708 done:
0709 spin_lock(&block_group->lock);
0710 block_group->caching_ctl = NULL;
0711 block_group->cached = ret ? BTRFS_CACHE_ERROR : BTRFS_CACHE_FINISHED;
0712 spin_unlock(&block_group->lock);
0713
0714 #ifdef CONFIG_BTRFS_DEBUG
0715 if (btrfs_should_fragment_free_space(block_group)) {
0716 u64 bytes_used;
0717
0718 spin_lock(&block_group->space_info->lock);
0719 spin_lock(&block_group->lock);
0720 bytes_used = block_group->length - block_group->used;
0721 block_group->space_info->bytes_used += bytes_used >> 1;
0722 spin_unlock(&block_group->lock);
0723 spin_unlock(&block_group->space_info->lock);
0724 fragment_free_space(block_group);
0725 }
0726 #endif
0727
0728 caching_ctl->progress = (u64)-1;
0729
0730 up_read(&fs_info->commit_root_sem);
0731 btrfs_free_excluded_extents(block_group);
0732 mutex_unlock(&caching_ctl->mutex);
0733
0734 wake_up(&caching_ctl->wait);
0735
0736 btrfs_put_caching_control(caching_ctl);
0737 btrfs_put_block_group(block_group);
0738 }
0739
0740 int btrfs_cache_block_group(struct btrfs_block_group *cache, bool wait)
0741 {
0742 struct btrfs_fs_info *fs_info = cache->fs_info;
0743 struct btrfs_caching_control *caching_ctl = NULL;
0744 int ret = 0;
0745
0746
0747 if (btrfs_is_zoned(fs_info))
0748 return 0;
0749
0750 caching_ctl = kzalloc(sizeof(*caching_ctl), GFP_NOFS);
0751 if (!caching_ctl)
0752 return -ENOMEM;
0753
0754 INIT_LIST_HEAD(&caching_ctl->list);
0755 mutex_init(&caching_ctl->mutex);
0756 init_waitqueue_head(&caching_ctl->wait);
0757 caching_ctl->block_group = cache;
0758 caching_ctl->progress = cache->start;
0759 refcount_set(&caching_ctl->count, 2);
0760 btrfs_init_work(&caching_ctl->work, caching_thread, NULL, NULL);
0761
0762 spin_lock(&cache->lock);
0763 if (cache->cached != BTRFS_CACHE_NO) {
0764 kfree(caching_ctl);
0765
0766 caching_ctl = cache->caching_ctl;
0767 if (caching_ctl)
0768 refcount_inc(&caching_ctl->count);
0769 spin_unlock(&cache->lock);
0770 goto out;
0771 }
0772 WARN_ON(cache->caching_ctl);
0773 cache->caching_ctl = caching_ctl;
0774 cache->cached = BTRFS_CACHE_STARTED;
0775 cache->has_caching_ctl = 1;
0776 spin_unlock(&cache->lock);
0777
0778 write_lock(&fs_info->block_group_cache_lock);
0779 refcount_inc(&caching_ctl->count);
0780 list_add_tail(&caching_ctl->list, &fs_info->caching_block_groups);
0781 write_unlock(&fs_info->block_group_cache_lock);
0782
0783 btrfs_get_block_group(cache);
0784
0785 btrfs_queue_work(fs_info->caching_workers, &caching_ctl->work);
0786 out:
0787 if (wait && caching_ctl)
0788 ret = btrfs_caching_ctl_wait_done(cache, caching_ctl);
0789 if (caching_ctl)
0790 btrfs_put_caching_control(caching_ctl);
0791
0792 return ret;
0793 }
0794
0795 static void clear_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags)
0796 {
0797 u64 extra_flags = chunk_to_extended(flags) &
0798 BTRFS_EXTENDED_PROFILE_MASK;
0799
0800 write_seqlock(&fs_info->profiles_lock);
0801 if (flags & BTRFS_BLOCK_GROUP_DATA)
0802 fs_info->avail_data_alloc_bits &= ~extra_flags;
0803 if (flags & BTRFS_BLOCK_GROUP_METADATA)
0804 fs_info->avail_metadata_alloc_bits &= ~extra_flags;
0805 if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
0806 fs_info->avail_system_alloc_bits &= ~extra_flags;
0807 write_sequnlock(&fs_info->profiles_lock);
0808 }
0809
0810
0811
0812
0813
0814
0815
0816
0817
0818 static void clear_incompat_bg_bits(struct btrfs_fs_info *fs_info, u64 flags)
0819 {
0820 bool found_raid56 = false;
0821 bool found_raid1c34 = false;
0822
0823 if ((flags & BTRFS_BLOCK_GROUP_RAID56_MASK) ||
0824 (flags & BTRFS_BLOCK_GROUP_RAID1C3) ||
0825 (flags & BTRFS_BLOCK_GROUP_RAID1C4)) {
0826 struct list_head *head = &fs_info->space_info;
0827 struct btrfs_space_info *sinfo;
0828
0829 list_for_each_entry_rcu(sinfo, head, list) {
0830 down_read(&sinfo->groups_sem);
0831 if (!list_empty(&sinfo->block_groups[BTRFS_RAID_RAID5]))
0832 found_raid56 = true;
0833 if (!list_empty(&sinfo->block_groups[BTRFS_RAID_RAID6]))
0834 found_raid56 = true;
0835 if (!list_empty(&sinfo->block_groups[BTRFS_RAID_RAID1C3]))
0836 found_raid1c34 = true;
0837 if (!list_empty(&sinfo->block_groups[BTRFS_RAID_RAID1C4]))
0838 found_raid1c34 = true;
0839 up_read(&sinfo->groups_sem);
0840 }
0841 if (!found_raid56)
0842 btrfs_clear_fs_incompat(fs_info, RAID56);
0843 if (!found_raid1c34)
0844 btrfs_clear_fs_incompat(fs_info, RAID1C34);
0845 }
0846 }
0847
0848 static int remove_block_group_item(struct btrfs_trans_handle *trans,
0849 struct btrfs_path *path,
0850 struct btrfs_block_group *block_group)
0851 {
0852 struct btrfs_fs_info *fs_info = trans->fs_info;
0853 struct btrfs_root *root;
0854 struct btrfs_key key;
0855 int ret;
0856
0857 root = btrfs_block_group_root(fs_info);
0858 key.objectid = block_group->start;
0859 key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
0860 key.offset = block_group->length;
0861
0862 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
0863 if (ret > 0)
0864 ret = -ENOENT;
0865 if (ret < 0)
0866 return ret;
0867
0868 ret = btrfs_del_item(trans, root, path);
0869 return ret;
0870 }
0871
0872 int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
0873 u64 group_start, struct extent_map *em)
0874 {
0875 struct btrfs_fs_info *fs_info = trans->fs_info;
0876 struct btrfs_path *path;
0877 struct btrfs_block_group *block_group;
0878 struct btrfs_free_cluster *cluster;
0879 struct inode *inode;
0880 struct kobject *kobj = NULL;
0881 int ret;
0882 int index;
0883 int factor;
0884 struct btrfs_caching_control *caching_ctl = NULL;
0885 bool remove_em;
0886 bool remove_rsv = false;
0887
0888 block_group = btrfs_lookup_block_group(fs_info, group_start);
0889 BUG_ON(!block_group);
0890 BUG_ON(!block_group->ro);
0891
0892 trace_btrfs_remove_block_group(block_group);
0893
0894
0895
0896
0897 btrfs_free_excluded_extents(block_group);
0898 btrfs_free_ref_tree_range(fs_info, block_group->start,
0899 block_group->length);
0900
0901 index = btrfs_bg_flags_to_raid_index(block_group->flags);
0902 factor = btrfs_bg_type_to_factor(block_group->flags);
0903
0904
0905 cluster = &fs_info->data_alloc_cluster;
0906 spin_lock(&cluster->refill_lock);
0907 btrfs_return_cluster_to_free_space(block_group, cluster);
0908 spin_unlock(&cluster->refill_lock);
0909
0910
0911
0912
0913
0914 cluster = &fs_info->meta_alloc_cluster;
0915 spin_lock(&cluster->refill_lock);
0916 btrfs_return_cluster_to_free_space(block_group, cluster);
0917 spin_unlock(&cluster->refill_lock);
0918
0919 btrfs_clear_treelog_bg(block_group);
0920 btrfs_clear_data_reloc_bg(block_group);
0921
0922 path = btrfs_alloc_path();
0923 if (!path) {
0924 ret = -ENOMEM;
0925 goto out;
0926 }
0927
0928
0929
0930
0931
0932 inode = lookup_free_space_inode(block_group, path);
0933
0934 mutex_lock(&trans->transaction->cache_write_mutex);
0935
0936
0937
0938
0939 spin_lock(&trans->transaction->dirty_bgs_lock);
0940 if (!list_empty(&block_group->io_list)) {
0941 list_del_init(&block_group->io_list);
0942
0943 WARN_ON(!IS_ERR(inode) && inode != block_group->io_ctl.inode);
0944
0945 spin_unlock(&trans->transaction->dirty_bgs_lock);
0946 btrfs_wait_cache_io(trans, block_group, path);
0947 btrfs_put_block_group(block_group);
0948 spin_lock(&trans->transaction->dirty_bgs_lock);
0949 }
0950
0951 if (!list_empty(&block_group->dirty_list)) {
0952 list_del_init(&block_group->dirty_list);
0953 remove_rsv = true;
0954 btrfs_put_block_group(block_group);
0955 }
0956 spin_unlock(&trans->transaction->dirty_bgs_lock);
0957 mutex_unlock(&trans->transaction->cache_write_mutex);
0958
0959 ret = btrfs_remove_free_space_inode(trans, inode, block_group);
0960 if (ret)
0961 goto out;
0962
0963 write_lock(&fs_info->block_group_cache_lock);
0964 rb_erase_cached(&block_group->cache_node,
0965 &fs_info->block_group_cache_tree);
0966 RB_CLEAR_NODE(&block_group->cache_node);
0967
0968
0969 btrfs_put_block_group(block_group);
0970
0971 write_unlock(&fs_info->block_group_cache_lock);
0972
0973 down_write(&block_group->space_info->groups_sem);
0974
0975
0976
0977
0978 list_del_init(&block_group->list);
0979 if (list_empty(&block_group->space_info->block_groups[index])) {
0980 kobj = block_group->space_info->block_group_kobjs[index];
0981 block_group->space_info->block_group_kobjs[index] = NULL;
0982 clear_avail_alloc_bits(fs_info, block_group->flags);
0983 }
0984 up_write(&block_group->space_info->groups_sem);
0985 clear_incompat_bg_bits(fs_info, block_group->flags);
0986 if (kobj) {
0987 kobject_del(kobj);
0988 kobject_put(kobj);
0989 }
0990
0991 if (block_group->has_caching_ctl)
0992 caching_ctl = btrfs_get_caching_control(block_group);
0993 if (block_group->cached == BTRFS_CACHE_STARTED)
0994 btrfs_wait_block_group_cache_done(block_group);
0995 if (block_group->has_caching_ctl) {
0996 write_lock(&fs_info->block_group_cache_lock);
0997 if (!caching_ctl) {
0998 struct btrfs_caching_control *ctl;
0999
1000 list_for_each_entry(ctl,
1001 &fs_info->caching_block_groups, list)
1002 if (ctl->block_group == block_group) {
1003 caching_ctl = ctl;
1004 refcount_inc(&caching_ctl->count);
1005 break;
1006 }
1007 }
1008 if (caching_ctl)
1009 list_del_init(&caching_ctl->list);
1010 write_unlock(&fs_info->block_group_cache_lock);
1011 if (caching_ctl) {
1012
1013 btrfs_put_caching_control(caching_ctl);
1014 btrfs_put_caching_control(caching_ctl);
1015 }
1016 }
1017
1018 spin_lock(&trans->transaction->dirty_bgs_lock);
1019 WARN_ON(!list_empty(&block_group->dirty_list));
1020 WARN_ON(!list_empty(&block_group->io_list));
1021 spin_unlock(&trans->transaction->dirty_bgs_lock);
1022
1023 btrfs_remove_free_space_cache(block_group);
1024
1025 spin_lock(&block_group->space_info->lock);
1026 list_del_init(&block_group->ro_list);
1027
1028 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG)) {
1029 WARN_ON(block_group->space_info->total_bytes
1030 < block_group->length);
1031 WARN_ON(block_group->space_info->bytes_readonly
1032 < block_group->length - block_group->zone_unusable);
1033 WARN_ON(block_group->space_info->bytes_zone_unusable
1034 < block_group->zone_unusable);
1035 WARN_ON(block_group->space_info->disk_total
1036 < block_group->length * factor);
1037 WARN_ON(block_group->zone_is_active &&
1038 block_group->space_info->active_total_bytes
1039 < block_group->length);
1040 }
1041 block_group->space_info->total_bytes -= block_group->length;
1042 if (block_group->zone_is_active)
1043 block_group->space_info->active_total_bytes -= block_group->length;
1044 block_group->space_info->bytes_readonly -=
1045 (block_group->length - block_group->zone_unusable);
1046 block_group->space_info->bytes_zone_unusable -=
1047 block_group->zone_unusable;
1048 block_group->space_info->disk_total -= block_group->length * factor;
1049
1050 spin_unlock(&block_group->space_info->lock);
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063 ret = remove_block_group_free_space(trans, block_group);
1064 if (ret)
1065 goto out;
1066
1067 ret = remove_block_group_item(trans, path, block_group);
1068 if (ret < 0)
1069 goto out;
1070
1071 spin_lock(&block_group->lock);
1072 block_group->removed = 1;
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099 remove_em = (atomic_read(&block_group->frozen) == 0);
1100 spin_unlock(&block_group->lock);
1101
1102 if (remove_em) {
1103 struct extent_map_tree *em_tree;
1104
1105 em_tree = &fs_info->mapping_tree;
1106 write_lock(&em_tree->lock);
1107 remove_extent_mapping(em_tree, em);
1108 write_unlock(&em_tree->lock);
1109
1110 free_extent_map(em);
1111 }
1112
1113 out:
1114
1115 btrfs_put_block_group(block_group);
1116 if (remove_rsv)
1117 btrfs_delayed_refs_rsv_release(fs_info, 1);
1118 btrfs_free_path(path);
1119 return ret;
1120 }
1121
1122 struct btrfs_trans_handle *btrfs_start_trans_remove_block_group(
1123 struct btrfs_fs_info *fs_info, const u64 chunk_offset)
1124 {
1125 struct btrfs_root *root = btrfs_block_group_root(fs_info);
1126 struct extent_map_tree *em_tree = &fs_info->mapping_tree;
1127 struct extent_map *em;
1128 struct map_lookup *map;
1129 unsigned int num_items;
1130
1131 read_lock(&em_tree->lock);
1132 em = lookup_extent_mapping(em_tree, chunk_offset, 1);
1133 read_unlock(&em_tree->lock);
1134 ASSERT(em && em->start == chunk_offset);
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155 map = em->map_lookup;
1156 num_items = 3 + map->num_stripes;
1157 free_extent_map(em);
1158
1159 return btrfs_start_transaction_fallback_global_rsv(root, num_items);
1160 }
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175 static int inc_block_group_ro(struct btrfs_block_group *cache, int force)
1176 {
1177 struct btrfs_space_info *sinfo = cache->space_info;
1178 u64 num_bytes;
1179 int ret = -ENOSPC;
1180
1181 spin_lock(&sinfo->lock);
1182 spin_lock(&cache->lock);
1183
1184 if (cache->swap_extents) {
1185 ret = -ETXTBSY;
1186 goto out;
1187 }
1188
1189 if (cache->ro) {
1190 cache->ro++;
1191 ret = 0;
1192 goto out;
1193 }
1194
1195 num_bytes = cache->length - cache->reserved - cache->pinned -
1196 cache->bytes_super - cache->zone_unusable - cache->used;
1197
1198
1199
1200
1201
1202 if (force) {
1203 ret = 0;
1204 } else if (sinfo->flags & BTRFS_BLOCK_GROUP_DATA) {
1205 u64 sinfo_used = btrfs_space_info_used(sinfo, true);
1206
1207
1208
1209
1210
1211 if (sinfo_used + num_bytes <= sinfo->total_bytes)
1212 ret = 0;
1213 } else {
1214
1215
1216
1217
1218
1219
1220 if (btrfs_can_overcommit(cache->fs_info, sinfo, num_bytes,
1221 BTRFS_RESERVE_NO_FLUSH))
1222 ret = 0;
1223 }
1224
1225 if (!ret) {
1226 sinfo->bytes_readonly += num_bytes;
1227 if (btrfs_is_zoned(cache->fs_info)) {
1228
1229 sinfo->bytes_readonly += cache->zone_unusable;
1230 sinfo->bytes_zone_unusable -= cache->zone_unusable;
1231 cache->zone_unusable = 0;
1232 }
1233 cache->ro++;
1234 list_add_tail(&cache->ro_list, &sinfo->ro_bgs);
1235 }
1236 out:
1237 spin_unlock(&cache->lock);
1238 spin_unlock(&sinfo->lock);
1239 if (ret == -ENOSPC && btrfs_test_opt(cache->fs_info, ENOSPC_DEBUG)) {
1240 btrfs_info(cache->fs_info,
1241 "unable to make block group %llu ro", cache->start);
1242 btrfs_dump_space_info(cache->fs_info, cache->space_info, 0, 0);
1243 }
1244 return ret;
1245 }
1246
1247 static bool clean_pinned_extents(struct btrfs_trans_handle *trans,
1248 struct btrfs_block_group *bg)
1249 {
1250 struct btrfs_fs_info *fs_info = bg->fs_info;
1251 struct btrfs_transaction *prev_trans = NULL;
1252 const u64 start = bg->start;
1253 const u64 end = start + bg->length - 1;
1254 int ret;
1255
1256 spin_lock(&fs_info->trans_lock);
1257 if (trans->transaction->list.prev != &fs_info->trans_list) {
1258 prev_trans = list_last_entry(&trans->transaction->list,
1259 struct btrfs_transaction, list);
1260 refcount_inc(&prev_trans->use_count);
1261 }
1262 spin_unlock(&fs_info->trans_lock);
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274 mutex_lock(&fs_info->unused_bg_unpin_mutex);
1275 if (prev_trans) {
1276 ret = clear_extent_bits(&prev_trans->pinned_extents, start, end,
1277 EXTENT_DIRTY);
1278 if (ret)
1279 goto out;
1280 }
1281
1282 ret = clear_extent_bits(&trans->transaction->pinned_extents, start, end,
1283 EXTENT_DIRTY);
1284 out:
1285 mutex_unlock(&fs_info->unused_bg_unpin_mutex);
1286 if (prev_trans)
1287 btrfs_put_transaction(prev_trans);
1288
1289 return ret == 0;
1290 }
1291
1292
1293
1294
1295
1296 void btrfs_delete_unused_bgs(struct btrfs_fs_info *fs_info)
1297 {
1298 struct btrfs_block_group *block_group;
1299 struct btrfs_space_info *space_info;
1300 struct btrfs_trans_handle *trans;
1301 const bool async_trim_enabled = btrfs_test_opt(fs_info, DISCARD_ASYNC);
1302 int ret = 0;
1303
1304 if (!test_bit(BTRFS_FS_OPEN, &fs_info->flags))
1305 return;
1306
1307
1308
1309
1310
1311 if (!mutex_trylock(&fs_info->reclaim_bgs_lock))
1312 return;
1313
1314 spin_lock(&fs_info->unused_bgs_lock);
1315 while (!list_empty(&fs_info->unused_bgs)) {
1316 int trimming;
1317
1318 block_group = list_first_entry(&fs_info->unused_bgs,
1319 struct btrfs_block_group,
1320 bg_list);
1321 list_del_init(&block_group->bg_list);
1322
1323 space_info = block_group->space_info;
1324
1325 if (ret || btrfs_mixed_space_info(space_info)) {
1326 btrfs_put_block_group(block_group);
1327 continue;
1328 }
1329 spin_unlock(&fs_info->unused_bgs_lock);
1330
1331 btrfs_discard_cancel_work(&fs_info->discard_ctl, block_group);
1332
1333
1334 down_write(&space_info->groups_sem);
1335
1336
1337
1338
1339
1340
1341 if (btrfs_test_opt(fs_info, DISCARD_ASYNC) &&
1342 !btrfs_is_free_space_trimmed(block_group)) {
1343 trace_btrfs_skip_unused_block_group(block_group);
1344 up_write(&space_info->groups_sem);
1345
1346 btrfs_discard_queue_work(&fs_info->discard_ctl,
1347 block_group);
1348 goto next;
1349 }
1350
1351 spin_lock(&block_group->lock);
1352 if (block_group->reserved || block_group->pinned ||
1353 block_group->used || block_group->ro ||
1354 list_is_singular(&block_group->list)) {
1355
1356
1357
1358
1359
1360
1361 trace_btrfs_skip_unused_block_group(block_group);
1362 spin_unlock(&block_group->lock);
1363 up_write(&space_info->groups_sem);
1364 goto next;
1365 }
1366 spin_unlock(&block_group->lock);
1367
1368
1369 ret = inc_block_group_ro(block_group, 0);
1370 up_write(&space_info->groups_sem);
1371 if (ret < 0) {
1372 ret = 0;
1373 goto next;
1374 }
1375
1376 ret = btrfs_zone_finish(block_group);
1377 if (ret < 0) {
1378 btrfs_dec_block_group_ro(block_group);
1379 if (ret == -EAGAIN)
1380 ret = 0;
1381 goto next;
1382 }
1383
1384
1385
1386
1387
1388 trans = btrfs_start_trans_remove_block_group(fs_info,
1389 block_group->start);
1390 if (IS_ERR(trans)) {
1391 btrfs_dec_block_group_ro(block_group);
1392 ret = PTR_ERR(trans);
1393 goto next;
1394 }
1395
1396
1397
1398
1399
1400 if (!clean_pinned_extents(trans, block_group)) {
1401 btrfs_dec_block_group_ro(block_group);
1402 goto end_trans;
1403 }
1404
1405
1406
1407
1408
1409
1410
1411
1412 spin_lock(&fs_info->discard_ctl.lock);
1413 if (!list_empty(&block_group->discard_list)) {
1414 spin_unlock(&fs_info->discard_ctl.lock);
1415 btrfs_dec_block_group_ro(block_group);
1416 btrfs_discard_queue_work(&fs_info->discard_ctl,
1417 block_group);
1418 goto end_trans;
1419 }
1420 spin_unlock(&fs_info->discard_ctl.lock);
1421
1422
1423 spin_lock(&space_info->lock);
1424 spin_lock(&block_group->lock);
1425
1426 btrfs_space_info_update_bytes_pinned(fs_info, space_info,
1427 -block_group->pinned);
1428 space_info->bytes_readonly += block_group->pinned;
1429 block_group->pinned = 0;
1430
1431 spin_unlock(&block_group->lock);
1432 spin_unlock(&space_info->lock);
1433
1434
1435
1436
1437
1438
1439
1440
1441 if (!async_trim_enabled && btrfs_test_opt(fs_info, DISCARD_ASYNC))
1442 goto flip_async;
1443
1444
1445
1446
1447
1448 trimming = btrfs_test_opt(fs_info, DISCARD_SYNC) ||
1449 btrfs_is_zoned(fs_info);
1450
1451
1452 if (trimming)
1453 btrfs_freeze_block_group(block_group);
1454
1455
1456
1457
1458
1459 ret = btrfs_remove_chunk(trans, block_group->start);
1460
1461 if (ret) {
1462 if (trimming)
1463 btrfs_unfreeze_block_group(block_group);
1464 goto end_trans;
1465 }
1466
1467
1468
1469
1470
1471
1472 if (trimming) {
1473 spin_lock(&fs_info->unused_bgs_lock);
1474
1475
1476
1477
1478
1479 list_move(&block_group->bg_list,
1480 &trans->transaction->deleted_bgs);
1481 spin_unlock(&fs_info->unused_bgs_lock);
1482 btrfs_get_block_group(block_group);
1483 }
1484 end_trans:
1485 btrfs_end_transaction(trans);
1486 next:
1487 btrfs_put_block_group(block_group);
1488 spin_lock(&fs_info->unused_bgs_lock);
1489 }
1490 spin_unlock(&fs_info->unused_bgs_lock);
1491 mutex_unlock(&fs_info->reclaim_bgs_lock);
1492 return;
1493
1494 flip_async:
1495 btrfs_end_transaction(trans);
1496 mutex_unlock(&fs_info->reclaim_bgs_lock);
1497 btrfs_put_block_group(block_group);
1498 btrfs_discard_punt_unused_bgs_list(fs_info);
1499 }
1500
1501 void btrfs_mark_bg_unused(struct btrfs_block_group *bg)
1502 {
1503 struct btrfs_fs_info *fs_info = bg->fs_info;
1504
1505 spin_lock(&fs_info->unused_bgs_lock);
1506 if (list_empty(&bg->bg_list)) {
1507 btrfs_get_block_group(bg);
1508 trace_btrfs_add_unused_block_group(bg);
1509 list_add_tail(&bg->bg_list, &fs_info->unused_bgs);
1510 }
1511 spin_unlock(&fs_info->unused_bgs_lock);
1512 }
1513
1514
1515
1516
1517
1518 static int reclaim_bgs_cmp(void *unused, const struct list_head *a,
1519 const struct list_head *b)
1520 {
1521 const struct btrfs_block_group *bg1, *bg2;
1522
1523 bg1 = list_entry(a, struct btrfs_block_group, bg_list);
1524 bg2 = list_entry(b, struct btrfs_block_group, bg_list);
1525
1526 return bg1->used > bg2->used;
1527 }
1528
1529 static inline bool btrfs_should_reclaim(struct btrfs_fs_info *fs_info)
1530 {
1531 if (btrfs_is_zoned(fs_info))
1532 return btrfs_zoned_should_reclaim(fs_info);
1533 return true;
1534 }
1535
1536 void btrfs_reclaim_bgs_work(struct work_struct *work)
1537 {
1538 struct btrfs_fs_info *fs_info =
1539 container_of(work, struct btrfs_fs_info, reclaim_bgs_work);
1540 struct btrfs_block_group *bg;
1541 struct btrfs_space_info *space_info;
1542
1543 if (!test_bit(BTRFS_FS_OPEN, &fs_info->flags))
1544 return;
1545
1546 if (!btrfs_should_reclaim(fs_info))
1547 return;
1548
1549 sb_start_write(fs_info->sb);
1550
1551 if (!btrfs_exclop_start(fs_info, BTRFS_EXCLOP_BALANCE)) {
1552 sb_end_write(fs_info->sb);
1553 return;
1554 }
1555
1556
1557
1558
1559
1560 if (!mutex_trylock(&fs_info->reclaim_bgs_lock)) {
1561 btrfs_exclop_finish(fs_info);
1562 sb_end_write(fs_info->sb);
1563 return;
1564 }
1565
1566 spin_lock(&fs_info->unused_bgs_lock);
1567
1568
1569
1570
1571
1572 list_sort(NULL, &fs_info->reclaim_bgs, reclaim_bgs_cmp);
1573 while (!list_empty(&fs_info->reclaim_bgs)) {
1574 u64 zone_unusable;
1575 int ret = 0;
1576
1577 bg = list_first_entry(&fs_info->reclaim_bgs,
1578 struct btrfs_block_group,
1579 bg_list);
1580 list_del_init(&bg->bg_list);
1581
1582 space_info = bg->space_info;
1583 spin_unlock(&fs_info->unused_bgs_lock);
1584
1585
1586 down_write(&space_info->groups_sem);
1587
1588 spin_lock(&bg->lock);
1589 if (bg->reserved || bg->pinned || bg->ro) {
1590
1591
1592
1593
1594
1595
1596 spin_unlock(&bg->lock);
1597 up_write(&space_info->groups_sem);
1598 goto next;
1599 }
1600 spin_unlock(&bg->lock);
1601
1602
1603 if (btrfs_fs_closing(fs_info)) {
1604 up_write(&space_info->groups_sem);
1605 goto next;
1606 }
1607
1608
1609
1610
1611
1612
1613
1614 zone_unusable = bg->zone_unusable;
1615 ret = inc_block_group_ro(bg, 0);
1616 up_write(&space_info->groups_sem);
1617 if (ret < 0)
1618 goto next;
1619
1620 btrfs_info(fs_info,
1621 "reclaiming chunk %llu with %llu%% used %llu%% unusable",
1622 bg->start, div_u64(bg->used * 100, bg->length),
1623 div64_u64(zone_unusable * 100, bg->length));
1624 trace_btrfs_reclaim_block_group(bg);
1625 ret = btrfs_relocate_chunk(fs_info, bg->start);
1626 if (ret) {
1627 btrfs_dec_block_group_ro(bg);
1628 btrfs_err(fs_info, "error relocating chunk %llu",
1629 bg->start);
1630 }
1631
1632 next:
1633 btrfs_put_block_group(bg);
1634 spin_lock(&fs_info->unused_bgs_lock);
1635 }
1636 spin_unlock(&fs_info->unused_bgs_lock);
1637 mutex_unlock(&fs_info->reclaim_bgs_lock);
1638 btrfs_exclop_finish(fs_info);
1639 sb_end_write(fs_info->sb);
1640 }
1641
1642 void btrfs_reclaim_bgs(struct btrfs_fs_info *fs_info)
1643 {
1644 spin_lock(&fs_info->unused_bgs_lock);
1645 if (!list_empty(&fs_info->reclaim_bgs))
1646 queue_work(system_unbound_wq, &fs_info->reclaim_bgs_work);
1647 spin_unlock(&fs_info->unused_bgs_lock);
1648 }
1649
1650 void btrfs_mark_bg_to_reclaim(struct btrfs_block_group *bg)
1651 {
1652 struct btrfs_fs_info *fs_info = bg->fs_info;
1653
1654 spin_lock(&fs_info->unused_bgs_lock);
1655 if (list_empty(&bg->bg_list)) {
1656 btrfs_get_block_group(bg);
1657 trace_btrfs_add_reclaim_block_group(bg);
1658 list_add_tail(&bg->bg_list, &fs_info->reclaim_bgs);
1659 }
1660 spin_unlock(&fs_info->unused_bgs_lock);
1661 }
1662
1663 static int read_bg_from_eb(struct btrfs_fs_info *fs_info, struct btrfs_key *key,
1664 struct btrfs_path *path)
1665 {
1666 struct extent_map_tree *em_tree;
1667 struct extent_map *em;
1668 struct btrfs_block_group_item bg;
1669 struct extent_buffer *leaf;
1670 int slot;
1671 u64 flags;
1672 int ret = 0;
1673
1674 slot = path->slots[0];
1675 leaf = path->nodes[0];
1676
1677 em_tree = &fs_info->mapping_tree;
1678 read_lock(&em_tree->lock);
1679 em = lookup_extent_mapping(em_tree, key->objectid, key->offset);
1680 read_unlock(&em_tree->lock);
1681 if (!em) {
1682 btrfs_err(fs_info,
1683 "logical %llu len %llu found bg but no related chunk",
1684 key->objectid, key->offset);
1685 return -ENOENT;
1686 }
1687
1688 if (em->start != key->objectid || em->len != key->offset) {
1689 btrfs_err(fs_info,
1690 "block group %llu len %llu mismatch with chunk %llu len %llu",
1691 key->objectid, key->offset, em->start, em->len);
1692 ret = -EUCLEAN;
1693 goto out_free_em;
1694 }
1695
1696 read_extent_buffer(leaf, &bg, btrfs_item_ptr_offset(leaf, slot),
1697 sizeof(bg));
1698 flags = btrfs_stack_block_group_flags(&bg) &
1699 BTRFS_BLOCK_GROUP_TYPE_MASK;
1700
1701 if (flags != (em->map_lookup->type & BTRFS_BLOCK_GROUP_TYPE_MASK)) {
1702 btrfs_err(fs_info,
1703 "block group %llu len %llu type flags 0x%llx mismatch with chunk type flags 0x%llx",
1704 key->objectid, key->offset, flags,
1705 (BTRFS_BLOCK_GROUP_TYPE_MASK & em->map_lookup->type));
1706 ret = -EUCLEAN;
1707 }
1708
1709 out_free_em:
1710 free_extent_map(em);
1711 return ret;
1712 }
1713
1714 static int find_first_block_group(struct btrfs_fs_info *fs_info,
1715 struct btrfs_path *path,
1716 struct btrfs_key *key)
1717 {
1718 struct btrfs_root *root = btrfs_block_group_root(fs_info);
1719 int ret;
1720 struct btrfs_key found_key;
1721
1722 btrfs_for_each_slot(root, key, &found_key, path, ret) {
1723 if (found_key.objectid >= key->objectid &&
1724 found_key.type == BTRFS_BLOCK_GROUP_ITEM_KEY) {
1725 return read_bg_from_eb(fs_info, &found_key, path);
1726 }
1727 }
1728 return ret;
1729 }
1730
1731 static void set_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags)
1732 {
1733 u64 extra_flags = chunk_to_extended(flags) &
1734 BTRFS_EXTENDED_PROFILE_MASK;
1735
1736 write_seqlock(&fs_info->profiles_lock);
1737 if (flags & BTRFS_BLOCK_GROUP_DATA)
1738 fs_info->avail_data_alloc_bits |= extra_flags;
1739 if (flags & BTRFS_BLOCK_GROUP_METADATA)
1740 fs_info->avail_metadata_alloc_bits |= extra_flags;
1741 if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
1742 fs_info->avail_system_alloc_bits |= extra_flags;
1743 write_sequnlock(&fs_info->profiles_lock);
1744 }
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761 int btrfs_rmap_block(struct btrfs_fs_info *fs_info, u64 chunk_start,
1762 struct block_device *bdev, u64 physical, u64 **logical,
1763 int *naddrs, int *stripe_len)
1764 {
1765 struct extent_map *em;
1766 struct map_lookup *map;
1767 u64 *buf;
1768 u64 bytenr;
1769 u64 data_stripe_length;
1770 u64 io_stripe_size;
1771 int i, nr = 0;
1772 int ret = 0;
1773
1774 em = btrfs_get_chunk_map(fs_info, chunk_start, 1);
1775 if (IS_ERR(em))
1776 return -EIO;
1777
1778 map = em->map_lookup;
1779 data_stripe_length = em->orig_block_len;
1780 io_stripe_size = map->stripe_len;
1781 chunk_start = em->start;
1782
1783
1784 if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK)
1785 io_stripe_size = map->stripe_len * nr_data_stripes(map);
1786
1787 buf = kcalloc(map->num_stripes, sizeof(u64), GFP_NOFS);
1788 if (!buf) {
1789 ret = -ENOMEM;
1790 goto out;
1791 }
1792
1793 for (i = 0; i < map->num_stripes; i++) {
1794 bool already_inserted = false;
1795 u64 stripe_nr;
1796 u64 offset;
1797 int j;
1798
1799 if (!in_range(physical, map->stripes[i].physical,
1800 data_stripe_length))
1801 continue;
1802
1803 if (bdev && map->stripes[i].dev->bdev != bdev)
1804 continue;
1805
1806 stripe_nr = physical - map->stripes[i].physical;
1807 stripe_nr = div64_u64_rem(stripe_nr, map->stripe_len, &offset);
1808
1809 if (map->type & (BTRFS_BLOCK_GROUP_RAID0 |
1810 BTRFS_BLOCK_GROUP_RAID10)) {
1811 stripe_nr = stripe_nr * map->num_stripes + i;
1812 stripe_nr = div_u64(stripe_nr, map->sub_stripes);
1813 }
1814
1815
1816
1817
1818
1819
1820 bytenr = chunk_start + stripe_nr * io_stripe_size + offset;
1821
1822
1823 for (j = 0; j < nr; j++) {
1824 if (buf[j] == bytenr) {
1825 already_inserted = true;
1826 break;
1827 }
1828 }
1829
1830 if (!already_inserted)
1831 buf[nr++] = bytenr;
1832 }
1833
1834 *logical = buf;
1835 *naddrs = nr;
1836 *stripe_len = io_stripe_size;
1837 out:
1838 free_extent_map(em);
1839 return ret;
1840 }
1841
1842 static int exclude_super_stripes(struct btrfs_block_group *cache)
1843 {
1844 struct btrfs_fs_info *fs_info = cache->fs_info;
1845 const bool zoned = btrfs_is_zoned(fs_info);
1846 u64 bytenr;
1847 u64 *logical;
1848 int stripe_len;
1849 int i, nr, ret;
1850
1851 if (cache->start < BTRFS_SUPER_INFO_OFFSET) {
1852 stripe_len = BTRFS_SUPER_INFO_OFFSET - cache->start;
1853 cache->bytes_super += stripe_len;
1854 ret = btrfs_add_excluded_extent(fs_info, cache->start,
1855 stripe_len);
1856 if (ret)
1857 return ret;
1858 }
1859
1860 for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
1861 bytenr = btrfs_sb_offset(i);
1862 ret = btrfs_rmap_block(fs_info, cache->start, NULL,
1863 bytenr, &logical, &nr, &stripe_len);
1864 if (ret)
1865 return ret;
1866
1867
1868 if (zoned && nr) {
1869 btrfs_err(fs_info,
1870 "zoned: block group %llu must not contain super block",
1871 cache->start);
1872 return -EUCLEAN;
1873 }
1874
1875 while (nr--) {
1876 u64 len = min_t(u64, stripe_len,
1877 cache->start + cache->length - logical[nr]);
1878
1879 cache->bytes_super += len;
1880 ret = btrfs_add_excluded_extent(fs_info, logical[nr],
1881 len);
1882 if (ret) {
1883 kfree(logical);
1884 return ret;
1885 }
1886 }
1887
1888 kfree(logical);
1889 }
1890 return 0;
1891 }
1892
1893 static void link_block_group(struct btrfs_block_group *cache)
1894 {
1895 struct btrfs_space_info *space_info = cache->space_info;
1896 int index = btrfs_bg_flags_to_raid_index(cache->flags);
1897
1898 down_write(&space_info->groups_sem);
1899 list_add_tail(&cache->list, &space_info->block_groups[index]);
1900 up_write(&space_info->groups_sem);
1901 }
1902
1903 static struct btrfs_block_group *btrfs_create_block_group_cache(
1904 struct btrfs_fs_info *fs_info, u64 start)
1905 {
1906 struct btrfs_block_group *cache;
1907
1908 cache = kzalloc(sizeof(*cache), GFP_NOFS);
1909 if (!cache)
1910 return NULL;
1911
1912 cache->free_space_ctl = kzalloc(sizeof(*cache->free_space_ctl),
1913 GFP_NOFS);
1914 if (!cache->free_space_ctl) {
1915 kfree(cache);
1916 return NULL;
1917 }
1918
1919 cache->start = start;
1920
1921 cache->fs_info = fs_info;
1922 cache->full_stripe_len = btrfs_full_stripe_len(fs_info, start);
1923
1924 cache->discard_index = BTRFS_DISCARD_INDEX_UNUSED;
1925
1926 refcount_set(&cache->refs, 1);
1927 spin_lock_init(&cache->lock);
1928 init_rwsem(&cache->data_rwsem);
1929 INIT_LIST_HEAD(&cache->list);
1930 INIT_LIST_HEAD(&cache->cluster_list);
1931 INIT_LIST_HEAD(&cache->bg_list);
1932 INIT_LIST_HEAD(&cache->ro_list);
1933 INIT_LIST_HEAD(&cache->discard_list);
1934 INIT_LIST_HEAD(&cache->dirty_list);
1935 INIT_LIST_HEAD(&cache->io_list);
1936 INIT_LIST_HEAD(&cache->active_bg_list);
1937 btrfs_init_free_space_ctl(cache, cache->free_space_ctl);
1938 atomic_set(&cache->frozen, 0);
1939 mutex_init(&cache->free_space_lock);
1940 btrfs_init_full_stripe_locks_tree(&cache->full_stripe_locks_root);
1941
1942 return cache;
1943 }
1944
1945
1946
1947
1948
1949 static int check_chunk_block_group_mappings(struct btrfs_fs_info *fs_info)
1950 {
1951 struct extent_map_tree *map_tree = &fs_info->mapping_tree;
1952 struct extent_map *em;
1953 struct btrfs_block_group *bg;
1954 u64 start = 0;
1955 int ret = 0;
1956
1957 while (1) {
1958 read_lock(&map_tree->lock);
1959
1960
1961
1962
1963
1964 em = lookup_extent_mapping(map_tree, start, 1);
1965 read_unlock(&map_tree->lock);
1966 if (!em)
1967 break;
1968
1969 bg = btrfs_lookup_block_group(fs_info, em->start);
1970 if (!bg) {
1971 btrfs_err(fs_info,
1972 "chunk start=%llu len=%llu doesn't have corresponding block group",
1973 em->start, em->len);
1974 ret = -EUCLEAN;
1975 free_extent_map(em);
1976 break;
1977 }
1978 if (bg->start != em->start || bg->length != em->len ||
1979 (bg->flags & BTRFS_BLOCK_GROUP_TYPE_MASK) !=
1980 (em->map_lookup->type & BTRFS_BLOCK_GROUP_TYPE_MASK)) {
1981 btrfs_err(fs_info,
1982 "chunk start=%llu len=%llu flags=0x%llx doesn't match block group start=%llu len=%llu flags=0x%llx",
1983 em->start, em->len,
1984 em->map_lookup->type & BTRFS_BLOCK_GROUP_TYPE_MASK,
1985 bg->start, bg->length,
1986 bg->flags & BTRFS_BLOCK_GROUP_TYPE_MASK);
1987 ret = -EUCLEAN;
1988 free_extent_map(em);
1989 btrfs_put_block_group(bg);
1990 break;
1991 }
1992 start = em->start + em->len;
1993 free_extent_map(em);
1994 btrfs_put_block_group(bg);
1995 }
1996 return ret;
1997 }
1998
1999 static int read_one_block_group(struct btrfs_fs_info *info,
2000 struct btrfs_block_group_item *bgi,
2001 const struct btrfs_key *key,
2002 int need_clear)
2003 {
2004 struct btrfs_block_group *cache;
2005 struct btrfs_space_info *space_info;
2006 const bool mixed = btrfs_fs_incompat(info, MIXED_GROUPS);
2007 int ret;
2008
2009 ASSERT(key->type == BTRFS_BLOCK_GROUP_ITEM_KEY);
2010
2011 cache = btrfs_create_block_group_cache(info, key->objectid);
2012 if (!cache)
2013 return -ENOMEM;
2014
2015 cache->length = key->offset;
2016 cache->used = btrfs_stack_block_group_used(bgi);
2017 cache->flags = btrfs_stack_block_group_flags(bgi);
2018 cache->global_root_id = btrfs_stack_block_group_chunk_objectid(bgi);
2019
2020 set_free_space_tree_thresholds(cache);
2021
2022 if (need_clear) {
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033 if (btrfs_test_opt(info, SPACE_CACHE))
2034 cache->disk_cache_state = BTRFS_DC_CLEAR;
2035 }
2036 if (!mixed && ((cache->flags & BTRFS_BLOCK_GROUP_METADATA) &&
2037 (cache->flags & BTRFS_BLOCK_GROUP_DATA))) {
2038 btrfs_err(info,
2039 "bg %llu is a mixed block group but filesystem hasn't enabled mixed block groups",
2040 cache->start);
2041 ret = -EINVAL;
2042 goto error;
2043 }
2044
2045 ret = btrfs_load_block_group_zone_info(cache, false);
2046 if (ret) {
2047 btrfs_err(info, "zoned: failed to load zone info of bg %llu",
2048 cache->start);
2049 goto error;
2050 }
2051
2052
2053
2054
2055
2056
2057 ret = exclude_super_stripes(cache);
2058 if (ret) {
2059
2060 btrfs_free_excluded_extents(cache);
2061 goto error;
2062 }
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076 if (btrfs_is_zoned(info)) {
2077 btrfs_calc_zone_unusable(cache);
2078
2079 btrfs_free_excluded_extents(cache);
2080 } else if (cache->length == cache->used) {
2081 cache->last_byte_to_unpin = (u64)-1;
2082 cache->cached = BTRFS_CACHE_FINISHED;
2083 btrfs_free_excluded_extents(cache);
2084 } else if (cache->used == 0) {
2085 cache->last_byte_to_unpin = (u64)-1;
2086 cache->cached = BTRFS_CACHE_FINISHED;
2087 add_new_free_space(cache, cache->start,
2088 cache->start + cache->length);
2089 btrfs_free_excluded_extents(cache);
2090 }
2091
2092 ret = btrfs_add_block_group_cache(info, cache);
2093 if (ret) {
2094 btrfs_remove_free_space_cache(cache);
2095 goto error;
2096 }
2097 trace_btrfs_add_block_group(info, cache, 0);
2098 btrfs_update_space_info(info, cache->flags, cache->length,
2099 cache->used, cache->bytes_super,
2100 cache->zone_unusable, cache->zone_is_active,
2101 &space_info);
2102
2103 cache->space_info = space_info;
2104
2105 link_block_group(cache);
2106
2107 set_avail_alloc_bits(info, cache->flags);
2108 if (btrfs_chunk_writeable(info, cache->start)) {
2109 if (cache->used == 0) {
2110 ASSERT(list_empty(&cache->bg_list));
2111 if (btrfs_test_opt(info, DISCARD_ASYNC))
2112 btrfs_discard_queue_work(&info->discard_ctl, cache);
2113 else
2114 btrfs_mark_bg_unused(cache);
2115 }
2116 } else {
2117 inc_block_group_ro(cache, 1);
2118 }
2119
2120 return 0;
2121 error:
2122 btrfs_put_block_group(cache);
2123 return ret;
2124 }
2125
2126 static int fill_dummy_bgs(struct btrfs_fs_info *fs_info)
2127 {
2128 struct extent_map_tree *em_tree = &fs_info->mapping_tree;
2129 struct btrfs_space_info *space_info;
2130 struct rb_node *node;
2131 int ret = 0;
2132
2133 for (node = rb_first_cached(&em_tree->map); node; node = rb_next(node)) {
2134 struct extent_map *em;
2135 struct map_lookup *map;
2136 struct btrfs_block_group *bg;
2137
2138 em = rb_entry(node, struct extent_map, rb_node);
2139 map = em->map_lookup;
2140 bg = btrfs_create_block_group_cache(fs_info, em->start);
2141 if (!bg) {
2142 ret = -ENOMEM;
2143 break;
2144 }
2145
2146
2147 bg->length = em->len;
2148 bg->flags = map->type;
2149 bg->last_byte_to_unpin = (u64)-1;
2150 bg->cached = BTRFS_CACHE_FINISHED;
2151 bg->used = em->len;
2152 bg->flags = map->type;
2153 ret = btrfs_add_block_group_cache(fs_info, bg);
2154
2155
2156
2157
2158 if (ret == -EEXIST) {
2159 ret = 0;
2160 btrfs_put_block_group(bg);
2161 continue;
2162 }
2163
2164 if (ret) {
2165 btrfs_remove_free_space_cache(bg);
2166 btrfs_put_block_group(bg);
2167 break;
2168 }
2169
2170 btrfs_update_space_info(fs_info, bg->flags, em->len, em->len,
2171 0, 0, false, &space_info);
2172 bg->space_info = space_info;
2173 link_block_group(bg);
2174
2175 set_avail_alloc_bits(fs_info, bg->flags);
2176 }
2177 if (!ret)
2178 btrfs_init_global_block_rsv(fs_info);
2179 return ret;
2180 }
2181
2182 int btrfs_read_block_groups(struct btrfs_fs_info *info)
2183 {
2184 struct btrfs_root *root = btrfs_block_group_root(info);
2185 struct btrfs_path *path;
2186 int ret;
2187 struct btrfs_block_group *cache;
2188 struct btrfs_space_info *space_info;
2189 struct btrfs_key key;
2190 int need_clear = 0;
2191 u64 cache_gen;
2192
2193 if (!root)
2194 return fill_dummy_bgs(info);
2195
2196 key.objectid = 0;
2197 key.offset = 0;
2198 key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
2199 path = btrfs_alloc_path();
2200 if (!path)
2201 return -ENOMEM;
2202
2203 cache_gen = btrfs_super_cache_generation(info->super_copy);
2204 if (btrfs_test_opt(info, SPACE_CACHE) &&
2205 btrfs_super_generation(info->super_copy) != cache_gen)
2206 need_clear = 1;
2207 if (btrfs_test_opt(info, CLEAR_CACHE))
2208 need_clear = 1;
2209
2210 while (1) {
2211 struct btrfs_block_group_item bgi;
2212 struct extent_buffer *leaf;
2213 int slot;
2214
2215 ret = find_first_block_group(info, path, &key);
2216 if (ret > 0)
2217 break;
2218 if (ret != 0)
2219 goto error;
2220
2221 leaf = path->nodes[0];
2222 slot = path->slots[0];
2223
2224 read_extent_buffer(leaf, &bgi, btrfs_item_ptr_offset(leaf, slot),
2225 sizeof(bgi));
2226
2227 btrfs_item_key_to_cpu(leaf, &key, slot);
2228 btrfs_release_path(path);
2229 ret = read_one_block_group(info, &bgi, &key, need_clear);
2230 if (ret < 0)
2231 goto error;
2232 key.objectid += key.offset;
2233 key.offset = 0;
2234 }
2235 btrfs_release_path(path);
2236
2237 list_for_each_entry(space_info, &info->space_info, list) {
2238 int i;
2239
2240 for (i = 0; i < BTRFS_NR_RAID_TYPES; i++) {
2241 if (list_empty(&space_info->block_groups[i]))
2242 continue;
2243 cache = list_first_entry(&space_info->block_groups[i],
2244 struct btrfs_block_group,
2245 list);
2246 btrfs_sysfs_add_block_group_type(cache);
2247 }
2248
2249 if (!(btrfs_get_alloc_profile(info, space_info->flags) &
2250 (BTRFS_BLOCK_GROUP_RAID10 |
2251 BTRFS_BLOCK_GROUP_RAID1_MASK |
2252 BTRFS_BLOCK_GROUP_RAID56_MASK |
2253 BTRFS_BLOCK_GROUP_DUP)))
2254 continue;
2255
2256
2257
2258
2259 list_for_each_entry(cache,
2260 &space_info->block_groups[BTRFS_RAID_RAID0],
2261 list)
2262 inc_block_group_ro(cache, 1);
2263 list_for_each_entry(cache,
2264 &space_info->block_groups[BTRFS_RAID_SINGLE],
2265 list)
2266 inc_block_group_ro(cache, 1);
2267 }
2268
2269 btrfs_init_global_block_rsv(info);
2270 ret = check_chunk_block_group_mappings(info);
2271 error:
2272 btrfs_free_path(path);
2273
2274
2275
2276
2277
2278
2279 if (ret && btrfs_test_opt(info, IGNOREBADROOTS))
2280 ret = fill_dummy_bgs(info);
2281 return ret;
2282 }
2283
2284
2285
2286
2287
2288
2289
2290
2291 static int insert_block_group_item(struct btrfs_trans_handle *trans,
2292 struct btrfs_block_group *block_group)
2293 {
2294 struct btrfs_fs_info *fs_info = trans->fs_info;
2295 struct btrfs_block_group_item bgi;
2296 struct btrfs_root *root = btrfs_block_group_root(fs_info);
2297 struct btrfs_key key;
2298
2299 spin_lock(&block_group->lock);
2300 btrfs_set_stack_block_group_used(&bgi, block_group->used);
2301 btrfs_set_stack_block_group_chunk_objectid(&bgi,
2302 block_group->global_root_id);
2303 btrfs_set_stack_block_group_flags(&bgi, block_group->flags);
2304 key.objectid = block_group->start;
2305 key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
2306 key.offset = block_group->length;
2307 spin_unlock(&block_group->lock);
2308
2309 return btrfs_insert_item(trans, root, &key, &bgi, sizeof(bgi));
2310 }
2311
2312 static int insert_dev_extent(struct btrfs_trans_handle *trans,
2313 struct btrfs_device *device, u64 chunk_offset,
2314 u64 start, u64 num_bytes)
2315 {
2316 struct btrfs_fs_info *fs_info = device->fs_info;
2317 struct btrfs_root *root = fs_info->dev_root;
2318 struct btrfs_path *path;
2319 struct btrfs_dev_extent *extent;
2320 struct extent_buffer *leaf;
2321 struct btrfs_key key;
2322 int ret;
2323
2324 WARN_ON(!test_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state));
2325 WARN_ON(test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state));
2326 path = btrfs_alloc_path();
2327 if (!path)
2328 return -ENOMEM;
2329
2330 key.objectid = device->devid;
2331 key.type = BTRFS_DEV_EXTENT_KEY;
2332 key.offset = start;
2333 ret = btrfs_insert_empty_item(trans, root, path, &key, sizeof(*extent));
2334 if (ret)
2335 goto out;
2336
2337 leaf = path->nodes[0];
2338 extent = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_dev_extent);
2339 btrfs_set_dev_extent_chunk_tree(leaf, extent, BTRFS_CHUNK_TREE_OBJECTID);
2340 btrfs_set_dev_extent_chunk_objectid(leaf, extent,
2341 BTRFS_FIRST_CHUNK_TREE_OBJECTID);
2342 btrfs_set_dev_extent_chunk_offset(leaf, extent, chunk_offset);
2343
2344 btrfs_set_dev_extent_length(leaf, extent, num_bytes);
2345 btrfs_mark_buffer_dirty(leaf);
2346 out:
2347 btrfs_free_path(path);
2348 return ret;
2349 }
2350
2351
2352
2353
2354
2355
2356
2357 static int insert_dev_extents(struct btrfs_trans_handle *trans,
2358 u64 chunk_offset, u64 chunk_size)
2359 {
2360 struct btrfs_fs_info *fs_info = trans->fs_info;
2361 struct btrfs_device *device;
2362 struct extent_map *em;
2363 struct map_lookup *map;
2364 u64 dev_offset;
2365 u64 stripe_size;
2366 int i;
2367 int ret = 0;
2368
2369 em = btrfs_get_chunk_map(fs_info, chunk_offset, chunk_size);
2370 if (IS_ERR(em))
2371 return PTR_ERR(em);
2372
2373 map = em->map_lookup;
2374 stripe_size = em->orig_block_len;
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385 mutex_lock(&fs_info->fs_devices->device_list_mutex);
2386 for (i = 0; i < map->num_stripes; i++) {
2387 device = map->stripes[i].dev;
2388 dev_offset = map->stripes[i].physical;
2389
2390 ret = insert_dev_extent(trans, device, chunk_offset, dev_offset,
2391 stripe_size);
2392 if (ret)
2393 break;
2394 }
2395 mutex_unlock(&fs_info->fs_devices->device_list_mutex);
2396
2397 free_extent_map(em);
2398 return ret;
2399 }
2400
2401
2402
2403
2404
2405
2406
2407
2408 void btrfs_create_pending_block_groups(struct btrfs_trans_handle *trans)
2409 {
2410 struct btrfs_fs_info *fs_info = trans->fs_info;
2411 struct btrfs_block_group *block_group;
2412 int ret = 0;
2413
2414 while (!list_empty(&trans->new_bgs)) {
2415 int index;
2416
2417 block_group = list_first_entry(&trans->new_bgs,
2418 struct btrfs_block_group,
2419 bg_list);
2420 if (ret)
2421 goto next;
2422
2423 index = btrfs_bg_flags_to_raid_index(block_group->flags);
2424
2425 ret = insert_block_group_item(trans, block_group);
2426 if (ret)
2427 btrfs_abort_transaction(trans, ret);
2428 if (!block_group->chunk_item_inserted) {
2429 mutex_lock(&fs_info->chunk_mutex);
2430 ret = btrfs_chunk_alloc_add_chunk_item(trans, block_group);
2431 mutex_unlock(&fs_info->chunk_mutex);
2432 if (ret)
2433 btrfs_abort_transaction(trans, ret);
2434 }
2435 ret = insert_dev_extents(trans, block_group->start,
2436 block_group->length);
2437 if (ret)
2438 btrfs_abort_transaction(trans, ret);
2439 add_block_group_free_space(trans, block_group);
2440
2441
2442
2443
2444
2445
2446
2447 if (block_group->space_info->block_group_kobjs[index] == NULL)
2448 btrfs_sysfs_add_block_group_type(block_group);
2449
2450
2451 next:
2452 btrfs_delayed_refs_rsv_release(fs_info, 1);
2453 list_del_init(&block_group->bg_list);
2454 }
2455 btrfs_trans_release_chunk_metadata(trans);
2456 }
2457
2458
2459
2460
2461
2462 static u64 calculate_global_root_id(struct btrfs_fs_info *fs_info, u64 offset)
2463 {
2464 u64 div = SZ_1G;
2465 u64 index;
2466
2467 if (!btrfs_fs_incompat(fs_info, EXTENT_TREE_V2))
2468 return BTRFS_FIRST_CHUNK_TREE_OBJECTID;
2469
2470
2471 if (btrfs_super_total_bytes(fs_info->super_copy) <= (SZ_1G * 10ULL))
2472 div = SZ_128M;
2473
2474 offset = div64_u64(offset, div);
2475 div64_u64_rem(offset, fs_info->nr_global_roots, &index);
2476 return index;
2477 }
2478
2479 struct btrfs_block_group *btrfs_make_block_group(struct btrfs_trans_handle *trans,
2480 u64 bytes_used, u64 type,
2481 u64 chunk_offset, u64 size)
2482 {
2483 struct btrfs_fs_info *fs_info = trans->fs_info;
2484 struct btrfs_block_group *cache;
2485 int ret;
2486
2487 btrfs_set_log_full_commit(trans);
2488
2489 cache = btrfs_create_block_group_cache(fs_info, chunk_offset);
2490 if (!cache)
2491 return ERR_PTR(-ENOMEM);
2492
2493 cache->length = size;
2494 set_free_space_tree_thresholds(cache);
2495 cache->used = bytes_used;
2496 cache->flags = type;
2497 cache->last_byte_to_unpin = (u64)-1;
2498 cache->cached = BTRFS_CACHE_FINISHED;
2499 cache->global_root_id = calculate_global_root_id(fs_info, cache->start);
2500
2501 if (btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE))
2502 cache->needs_free_space = 1;
2503
2504 ret = btrfs_load_block_group_zone_info(cache, true);
2505 if (ret) {
2506 btrfs_put_block_group(cache);
2507 return ERR_PTR(ret);
2508 }
2509
2510 ret = exclude_super_stripes(cache);
2511 if (ret) {
2512
2513 btrfs_free_excluded_extents(cache);
2514 btrfs_put_block_group(cache);
2515 return ERR_PTR(ret);
2516 }
2517
2518 add_new_free_space(cache, chunk_offset, chunk_offset + size);
2519
2520 btrfs_free_excluded_extents(cache);
2521
2522 #ifdef CONFIG_BTRFS_DEBUG
2523 if (btrfs_should_fragment_free_space(cache)) {
2524 u64 new_bytes_used = size - bytes_used;
2525
2526 bytes_used += new_bytes_used >> 1;
2527 fragment_free_space(cache);
2528 }
2529 #endif
2530
2531
2532
2533
2534
2535 cache->space_info = btrfs_find_space_info(fs_info, cache->flags);
2536 ASSERT(cache->space_info);
2537
2538 ret = btrfs_add_block_group_cache(fs_info, cache);
2539 if (ret) {
2540 btrfs_remove_free_space_cache(cache);
2541 btrfs_put_block_group(cache);
2542 return ERR_PTR(ret);
2543 }
2544
2545
2546
2547
2548
2549 trace_btrfs_add_block_group(fs_info, cache, 1);
2550 btrfs_update_space_info(fs_info, cache->flags, size, bytes_used,
2551 cache->bytes_super, cache->zone_unusable,
2552 cache->zone_is_active, &cache->space_info);
2553 btrfs_update_global_block_rsv(fs_info);
2554
2555 link_block_group(cache);
2556
2557 list_add_tail(&cache->bg_list, &trans->new_bgs);
2558 trans->delayed_ref_updates++;
2559 btrfs_update_delayed_refs_rsv(trans);
2560
2561 set_avail_alloc_bits(fs_info, type);
2562 return cache;
2563 }
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574 int btrfs_inc_block_group_ro(struct btrfs_block_group *cache,
2575 bool do_chunk_alloc)
2576 {
2577 struct btrfs_fs_info *fs_info = cache->fs_info;
2578 struct btrfs_trans_handle *trans;
2579 struct btrfs_root *root = btrfs_block_group_root(fs_info);
2580 u64 alloc_flags;
2581 int ret;
2582 bool dirty_bg_running;
2583
2584
2585
2586
2587
2588
2589
2590 if (sb_rdonly(fs_info->sb)) {
2591 mutex_lock(&fs_info->ro_block_group_mutex);
2592 ret = inc_block_group_ro(cache, 0);
2593 mutex_unlock(&fs_info->ro_block_group_mutex);
2594 return ret;
2595 }
2596
2597 do {
2598 trans = btrfs_join_transaction(root);
2599 if (IS_ERR(trans))
2600 return PTR_ERR(trans);
2601
2602 dirty_bg_running = false;
2603
2604
2605
2606
2607
2608
2609 mutex_lock(&fs_info->ro_block_group_mutex);
2610 if (test_bit(BTRFS_TRANS_DIRTY_BG_RUN, &trans->transaction->flags)) {
2611 u64 transid = trans->transid;
2612
2613 mutex_unlock(&fs_info->ro_block_group_mutex);
2614 btrfs_end_transaction(trans);
2615
2616 ret = btrfs_wait_for_commit(fs_info, transid);
2617 if (ret)
2618 return ret;
2619 dirty_bg_running = true;
2620 }
2621 } while (dirty_bg_running);
2622
2623 if (do_chunk_alloc) {
2624
2625
2626
2627
2628 alloc_flags = btrfs_get_alloc_profile(fs_info, cache->flags);
2629 if (alloc_flags != cache->flags) {
2630 ret = btrfs_chunk_alloc(trans, alloc_flags,
2631 CHUNK_ALLOC_FORCE);
2632
2633
2634
2635
2636 if (ret == -ENOSPC)
2637 ret = 0;
2638 if (ret < 0)
2639 goto out;
2640 }
2641 }
2642
2643 ret = inc_block_group_ro(cache, 0);
2644 if (!do_chunk_alloc || ret == -ETXTBSY)
2645 goto unlock_out;
2646 if (!ret)
2647 goto out;
2648 alloc_flags = btrfs_get_alloc_profile(fs_info, cache->space_info->flags);
2649 ret = btrfs_chunk_alloc(trans, alloc_flags, CHUNK_ALLOC_FORCE);
2650 if (ret < 0)
2651 goto out;
2652
2653
2654
2655
2656 ret = btrfs_zoned_activate_one_bg(fs_info, cache->space_info, true);
2657 if (ret < 0)
2658 goto out;
2659
2660 ret = inc_block_group_ro(cache, 0);
2661 if (ret == -ETXTBSY)
2662 goto unlock_out;
2663 out:
2664 if (cache->flags & BTRFS_BLOCK_GROUP_SYSTEM) {
2665 alloc_flags = btrfs_get_alloc_profile(fs_info, cache->flags);
2666 mutex_lock(&fs_info->chunk_mutex);
2667 check_system_chunk(trans, alloc_flags);
2668 mutex_unlock(&fs_info->chunk_mutex);
2669 }
2670 unlock_out:
2671 mutex_unlock(&fs_info->ro_block_group_mutex);
2672
2673 btrfs_end_transaction(trans);
2674 return ret;
2675 }
2676
2677 void btrfs_dec_block_group_ro(struct btrfs_block_group *cache)
2678 {
2679 struct btrfs_space_info *sinfo = cache->space_info;
2680 u64 num_bytes;
2681
2682 BUG_ON(!cache->ro);
2683
2684 spin_lock(&sinfo->lock);
2685 spin_lock(&cache->lock);
2686 if (!--cache->ro) {
2687 if (btrfs_is_zoned(cache->fs_info)) {
2688
2689 cache->zone_unusable =
2690 (cache->alloc_offset - cache->used) +
2691 (cache->length - cache->zone_capacity);
2692 sinfo->bytes_zone_unusable += cache->zone_unusable;
2693 sinfo->bytes_readonly -= cache->zone_unusable;
2694 }
2695 num_bytes = cache->length - cache->reserved -
2696 cache->pinned - cache->bytes_super -
2697 cache->zone_unusable - cache->used;
2698 sinfo->bytes_readonly -= num_bytes;
2699 list_del_init(&cache->ro_list);
2700 }
2701 spin_unlock(&cache->lock);
2702 spin_unlock(&sinfo->lock);
2703 }
2704
2705 static int update_block_group_item(struct btrfs_trans_handle *trans,
2706 struct btrfs_path *path,
2707 struct btrfs_block_group *cache)
2708 {
2709 struct btrfs_fs_info *fs_info = trans->fs_info;
2710 int ret;
2711 struct btrfs_root *root = btrfs_block_group_root(fs_info);
2712 unsigned long bi;
2713 struct extent_buffer *leaf;
2714 struct btrfs_block_group_item bgi;
2715 struct btrfs_key key;
2716
2717 key.objectid = cache->start;
2718 key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
2719 key.offset = cache->length;
2720
2721 ret = btrfs_search_slot(trans, root, &key, path, 0, 1);
2722 if (ret) {
2723 if (ret > 0)
2724 ret = -ENOENT;
2725 goto fail;
2726 }
2727
2728 leaf = path->nodes[0];
2729 bi = btrfs_item_ptr_offset(leaf, path->slots[0]);
2730 btrfs_set_stack_block_group_used(&bgi, cache->used);
2731 btrfs_set_stack_block_group_chunk_objectid(&bgi,
2732 cache->global_root_id);
2733 btrfs_set_stack_block_group_flags(&bgi, cache->flags);
2734 write_extent_buffer(leaf, &bgi, bi, sizeof(bgi));
2735 btrfs_mark_buffer_dirty(leaf);
2736 fail:
2737 btrfs_release_path(path);
2738 return ret;
2739
2740 }
2741
2742 static int cache_save_setup(struct btrfs_block_group *block_group,
2743 struct btrfs_trans_handle *trans,
2744 struct btrfs_path *path)
2745 {
2746 struct btrfs_fs_info *fs_info = block_group->fs_info;
2747 struct btrfs_root *root = fs_info->tree_root;
2748 struct inode *inode = NULL;
2749 struct extent_changeset *data_reserved = NULL;
2750 u64 alloc_hint = 0;
2751 int dcs = BTRFS_DC_ERROR;
2752 u64 cache_size = 0;
2753 int retries = 0;
2754 int ret = 0;
2755
2756 if (!btrfs_test_opt(fs_info, SPACE_CACHE))
2757 return 0;
2758
2759
2760
2761
2762
2763 if (block_group->length < (100 * SZ_1M)) {
2764 spin_lock(&block_group->lock);
2765 block_group->disk_cache_state = BTRFS_DC_WRITTEN;
2766 spin_unlock(&block_group->lock);
2767 return 0;
2768 }
2769
2770 if (TRANS_ABORTED(trans))
2771 return 0;
2772 again:
2773 inode = lookup_free_space_inode(block_group, path);
2774 if (IS_ERR(inode) && PTR_ERR(inode) != -ENOENT) {
2775 ret = PTR_ERR(inode);
2776 btrfs_release_path(path);
2777 goto out;
2778 }
2779
2780 if (IS_ERR(inode)) {
2781 BUG_ON(retries);
2782 retries++;
2783
2784 if (block_group->ro)
2785 goto out_free;
2786
2787 ret = create_free_space_inode(trans, block_group, path);
2788 if (ret)
2789 goto out_free;
2790 goto again;
2791 }
2792
2793
2794
2795
2796
2797
2798 BTRFS_I(inode)->generation = 0;
2799 ret = btrfs_update_inode(trans, root, BTRFS_I(inode));
2800 if (ret) {
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811 btrfs_abort_transaction(trans, ret);
2812 goto out_put;
2813 }
2814 WARN_ON(ret);
2815
2816
2817 if (block_group->cache_generation == trans->transid &&
2818 i_size_read(inode)) {
2819 dcs = BTRFS_DC_SETUP;
2820 goto out_put;
2821 }
2822
2823 if (i_size_read(inode) > 0) {
2824 ret = btrfs_check_trunc_cache_free_space(fs_info,
2825 &fs_info->global_block_rsv);
2826 if (ret)
2827 goto out_put;
2828
2829 ret = btrfs_truncate_free_space_cache(trans, NULL, inode);
2830 if (ret)
2831 goto out_put;
2832 }
2833
2834 spin_lock(&block_group->lock);
2835 if (block_group->cached != BTRFS_CACHE_FINISHED ||
2836 !btrfs_test_opt(fs_info, SPACE_CACHE)) {
2837
2838
2839
2840
2841
2842
2843 dcs = BTRFS_DC_WRITTEN;
2844 spin_unlock(&block_group->lock);
2845 goto out_put;
2846 }
2847 spin_unlock(&block_group->lock);
2848
2849
2850
2851
2852
2853 if (test_bit(BTRFS_TRANS_CACHE_ENOSPC, &trans->transaction->flags)) {
2854 ret = -ENOSPC;
2855 goto out_put;
2856 }
2857
2858
2859
2860
2861
2862
2863
2864 cache_size = div_u64(block_group->length, SZ_256M);
2865 if (!cache_size)
2866 cache_size = 1;
2867
2868 cache_size *= 16;
2869 cache_size *= fs_info->sectorsize;
2870
2871 ret = btrfs_check_data_free_space(BTRFS_I(inode), &data_reserved, 0,
2872 cache_size);
2873 if (ret)
2874 goto out_put;
2875
2876 ret = btrfs_prealloc_file_range_trans(inode, trans, 0, 0, cache_size,
2877 cache_size, cache_size,
2878 &alloc_hint);
2879
2880
2881
2882
2883
2884
2885
2886
2887 if (!ret)
2888 dcs = BTRFS_DC_SETUP;
2889 else if (ret == -ENOSPC)
2890 set_bit(BTRFS_TRANS_CACHE_ENOSPC, &trans->transaction->flags);
2891
2892 out_put:
2893 iput(inode);
2894 out_free:
2895 btrfs_release_path(path);
2896 out:
2897 spin_lock(&block_group->lock);
2898 if (!ret && dcs == BTRFS_DC_SETUP)
2899 block_group->cache_generation = trans->transid;
2900 block_group->disk_cache_state = dcs;
2901 spin_unlock(&block_group->lock);
2902
2903 extent_changeset_free(data_reserved);
2904 return ret;
2905 }
2906
2907 int btrfs_setup_space_cache(struct btrfs_trans_handle *trans)
2908 {
2909 struct btrfs_fs_info *fs_info = trans->fs_info;
2910 struct btrfs_block_group *cache, *tmp;
2911 struct btrfs_transaction *cur_trans = trans->transaction;
2912 struct btrfs_path *path;
2913
2914 if (list_empty(&cur_trans->dirty_bgs) ||
2915 !btrfs_test_opt(fs_info, SPACE_CACHE))
2916 return 0;
2917
2918 path = btrfs_alloc_path();
2919 if (!path)
2920 return -ENOMEM;
2921
2922
2923 list_for_each_entry_safe(cache, tmp, &cur_trans->dirty_bgs,
2924 dirty_list) {
2925 if (cache->disk_cache_state == BTRFS_DC_CLEAR)
2926 cache_save_setup(cache, trans, path);
2927 }
2928
2929 btrfs_free_path(path);
2930 return 0;
2931 }
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945 int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans)
2946 {
2947 struct btrfs_fs_info *fs_info = trans->fs_info;
2948 struct btrfs_block_group *cache;
2949 struct btrfs_transaction *cur_trans = trans->transaction;
2950 int ret = 0;
2951 int should_put;
2952 struct btrfs_path *path = NULL;
2953 LIST_HEAD(dirty);
2954 struct list_head *io = &cur_trans->io_bgs;
2955 int loops = 0;
2956
2957 spin_lock(&cur_trans->dirty_bgs_lock);
2958 if (list_empty(&cur_trans->dirty_bgs)) {
2959 spin_unlock(&cur_trans->dirty_bgs_lock);
2960 return 0;
2961 }
2962 list_splice_init(&cur_trans->dirty_bgs, &dirty);
2963 spin_unlock(&cur_trans->dirty_bgs_lock);
2964
2965 again:
2966
2967 btrfs_create_pending_block_groups(trans);
2968
2969 if (!path) {
2970 path = btrfs_alloc_path();
2971 if (!path) {
2972 ret = -ENOMEM;
2973 goto out;
2974 }
2975 }
2976
2977
2978
2979
2980
2981
2982 mutex_lock(&trans->transaction->cache_write_mutex);
2983 while (!list_empty(&dirty)) {
2984 bool drop_reserve = true;
2985
2986 cache = list_first_entry(&dirty, struct btrfs_block_group,
2987 dirty_list);
2988
2989
2990
2991
2992
2993 if (!list_empty(&cache->io_list)) {
2994 list_del_init(&cache->io_list);
2995 btrfs_wait_cache_io(trans, cache, path);
2996 btrfs_put_block_group(cache);
2997 }
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008 spin_lock(&cur_trans->dirty_bgs_lock);
3009 list_del_init(&cache->dirty_list);
3010 spin_unlock(&cur_trans->dirty_bgs_lock);
3011
3012 should_put = 1;
3013
3014 cache_save_setup(cache, trans, path);
3015
3016 if (cache->disk_cache_state == BTRFS_DC_SETUP) {
3017 cache->io_ctl.inode = NULL;
3018 ret = btrfs_write_out_cache(trans, cache, path);
3019 if (ret == 0 && cache->io_ctl.inode) {
3020 should_put = 0;
3021
3022
3023
3024
3025
3026
3027 list_add_tail(&cache->io_list, io);
3028 } else {
3029
3030
3031
3032
3033 ret = 0;
3034 }
3035 }
3036 if (!ret) {
3037 ret = update_block_group_item(trans, path, cache);
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047 if (ret == -ENOENT) {
3048 ret = 0;
3049 spin_lock(&cur_trans->dirty_bgs_lock);
3050 if (list_empty(&cache->dirty_list)) {
3051 list_add_tail(&cache->dirty_list,
3052 &cur_trans->dirty_bgs);
3053 btrfs_get_block_group(cache);
3054 drop_reserve = false;
3055 }
3056 spin_unlock(&cur_trans->dirty_bgs_lock);
3057 } else if (ret) {
3058 btrfs_abort_transaction(trans, ret);
3059 }
3060 }
3061
3062
3063 if (should_put)
3064 btrfs_put_block_group(cache);
3065 if (drop_reserve)
3066 btrfs_delayed_refs_rsv_release(fs_info, 1);
3067
3068
3069
3070
3071
3072 mutex_unlock(&trans->transaction->cache_write_mutex);
3073 if (ret)
3074 goto out;
3075 mutex_lock(&trans->transaction->cache_write_mutex);
3076 }
3077 mutex_unlock(&trans->transaction->cache_write_mutex);
3078
3079
3080
3081
3082
3083 if (!ret)
3084 ret = btrfs_run_delayed_refs(trans, 0);
3085 if (!ret && loops == 0) {
3086 loops++;
3087 spin_lock(&cur_trans->dirty_bgs_lock);
3088 list_splice_init(&cur_trans->dirty_bgs, &dirty);
3089
3090
3091
3092
3093 if (!list_empty(&dirty)) {
3094 spin_unlock(&cur_trans->dirty_bgs_lock);
3095 goto again;
3096 }
3097 spin_unlock(&cur_trans->dirty_bgs_lock);
3098 }
3099 out:
3100 if (ret < 0) {
3101 spin_lock(&cur_trans->dirty_bgs_lock);
3102 list_splice_init(&dirty, &cur_trans->dirty_bgs);
3103 spin_unlock(&cur_trans->dirty_bgs_lock);
3104 btrfs_cleanup_dirty_bgs(cur_trans, fs_info);
3105 }
3106
3107 btrfs_free_path(path);
3108 return ret;
3109 }
3110
3111 int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans)
3112 {
3113 struct btrfs_fs_info *fs_info = trans->fs_info;
3114 struct btrfs_block_group *cache;
3115 struct btrfs_transaction *cur_trans = trans->transaction;
3116 int ret = 0;
3117 int should_put;
3118 struct btrfs_path *path;
3119 struct list_head *io = &cur_trans->io_bgs;
3120
3121 path = btrfs_alloc_path();
3122 if (!path)
3123 return -ENOMEM;
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140 spin_lock(&cur_trans->dirty_bgs_lock);
3141 while (!list_empty(&cur_trans->dirty_bgs)) {
3142 cache = list_first_entry(&cur_trans->dirty_bgs,
3143 struct btrfs_block_group,
3144 dirty_list);
3145
3146
3147
3148
3149
3150
3151 if (!list_empty(&cache->io_list)) {
3152 spin_unlock(&cur_trans->dirty_bgs_lock);
3153 list_del_init(&cache->io_list);
3154 btrfs_wait_cache_io(trans, cache, path);
3155 btrfs_put_block_group(cache);
3156 spin_lock(&cur_trans->dirty_bgs_lock);
3157 }
3158
3159
3160
3161
3162
3163 list_del_init(&cache->dirty_list);
3164 spin_unlock(&cur_trans->dirty_bgs_lock);
3165 should_put = 1;
3166
3167 cache_save_setup(cache, trans, path);
3168
3169 if (!ret)
3170 ret = btrfs_run_delayed_refs(trans,
3171 (unsigned long) -1);
3172
3173 if (!ret && cache->disk_cache_state == BTRFS_DC_SETUP) {
3174 cache->io_ctl.inode = NULL;
3175 ret = btrfs_write_out_cache(trans, cache, path);
3176 if (ret == 0 && cache->io_ctl.inode) {
3177 should_put = 0;
3178 list_add_tail(&cache->io_list, io);
3179 } else {
3180
3181
3182
3183
3184 ret = 0;
3185 }
3186 }
3187 if (!ret) {
3188 ret = update_block_group_item(trans, path, cache);
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202 if (ret == -ENOENT) {
3203 wait_event(cur_trans->writer_wait,
3204 atomic_read(&cur_trans->num_writers) == 1);
3205 ret = update_block_group_item(trans, path, cache);
3206 }
3207 if (ret)
3208 btrfs_abort_transaction(trans, ret);
3209 }
3210
3211
3212 if (should_put)
3213 btrfs_put_block_group(cache);
3214 btrfs_delayed_refs_rsv_release(fs_info, 1);
3215 spin_lock(&cur_trans->dirty_bgs_lock);
3216 }
3217 spin_unlock(&cur_trans->dirty_bgs_lock);
3218
3219
3220
3221
3222
3223 while (!list_empty(io)) {
3224 cache = list_first_entry(io, struct btrfs_block_group,
3225 io_list);
3226 list_del_init(&cache->io_list);
3227 btrfs_wait_cache_io(trans, cache, path);
3228 btrfs_put_block_group(cache);
3229 }
3230
3231 btrfs_free_path(path);
3232 return ret;
3233 }
3234
3235 static inline bool should_reclaim_block_group(struct btrfs_block_group *bg,
3236 u64 bytes_freed)
3237 {
3238 const struct btrfs_space_info *space_info = bg->space_info;
3239 const int reclaim_thresh = READ_ONCE(space_info->bg_reclaim_threshold);
3240 const u64 new_val = bg->used;
3241 const u64 old_val = new_val + bytes_freed;
3242 u64 thresh;
3243
3244 if (reclaim_thresh == 0)
3245 return false;
3246
3247 thresh = div_factor_fine(bg->length, reclaim_thresh);
3248
3249
3250
3251
3252
3253 if (old_val < thresh)
3254 return false;
3255 if (new_val >= thresh)
3256 return false;
3257 return true;
3258 }
3259
3260 int btrfs_update_block_group(struct btrfs_trans_handle *trans,
3261 u64 bytenr, u64 num_bytes, bool alloc)
3262 {
3263 struct btrfs_fs_info *info = trans->fs_info;
3264 struct btrfs_block_group *cache = NULL;
3265 u64 total = num_bytes;
3266 u64 old_val;
3267 u64 byte_in_group;
3268 int factor;
3269 int ret = 0;
3270
3271
3272 spin_lock(&info->delalloc_root_lock);
3273 old_val = btrfs_super_bytes_used(info->super_copy);
3274 if (alloc)
3275 old_val += num_bytes;
3276 else
3277 old_val -= num_bytes;
3278 btrfs_set_super_bytes_used(info->super_copy, old_val);
3279 spin_unlock(&info->delalloc_root_lock);
3280
3281 while (total) {
3282 bool reclaim;
3283
3284 cache = btrfs_lookup_block_group(info, bytenr);
3285 if (!cache) {
3286 ret = -ENOENT;
3287 break;
3288 }
3289 factor = btrfs_bg_type_to_factor(cache->flags);
3290
3291
3292
3293
3294
3295
3296
3297 if (!alloc && !btrfs_block_group_done(cache))
3298 btrfs_cache_block_group(cache, true);
3299
3300 byte_in_group = bytenr - cache->start;
3301 WARN_ON(byte_in_group > cache->length);
3302
3303 spin_lock(&cache->space_info->lock);
3304 spin_lock(&cache->lock);
3305
3306 if (btrfs_test_opt(info, SPACE_CACHE) &&
3307 cache->disk_cache_state < BTRFS_DC_CLEAR)
3308 cache->disk_cache_state = BTRFS_DC_CLEAR;
3309
3310 old_val = cache->used;
3311 num_bytes = min(total, cache->length - byte_in_group);
3312 if (alloc) {
3313 old_val += num_bytes;
3314 cache->used = old_val;
3315 cache->reserved -= num_bytes;
3316 cache->space_info->bytes_reserved -= num_bytes;
3317 cache->space_info->bytes_used += num_bytes;
3318 cache->space_info->disk_used += num_bytes * factor;
3319 spin_unlock(&cache->lock);
3320 spin_unlock(&cache->space_info->lock);
3321 } else {
3322 old_val -= num_bytes;
3323 cache->used = old_val;
3324 cache->pinned += num_bytes;
3325 btrfs_space_info_update_bytes_pinned(info,
3326 cache->space_info, num_bytes);
3327 cache->space_info->bytes_used -= num_bytes;
3328 cache->space_info->disk_used -= num_bytes * factor;
3329
3330 reclaim = should_reclaim_block_group(cache, num_bytes);
3331 spin_unlock(&cache->lock);
3332 spin_unlock(&cache->space_info->lock);
3333
3334 set_extent_dirty(&trans->transaction->pinned_extents,
3335 bytenr, bytenr + num_bytes - 1,
3336 GFP_NOFS | __GFP_NOFAIL);
3337 }
3338
3339 spin_lock(&trans->transaction->dirty_bgs_lock);
3340 if (list_empty(&cache->dirty_list)) {
3341 list_add_tail(&cache->dirty_list,
3342 &trans->transaction->dirty_bgs);
3343 trans->delayed_ref_updates++;
3344 btrfs_get_block_group(cache);
3345 }
3346 spin_unlock(&trans->transaction->dirty_bgs_lock);
3347
3348
3349
3350
3351
3352
3353
3354 if (!alloc && old_val == 0) {
3355 if (!btrfs_test_opt(info, DISCARD_ASYNC))
3356 btrfs_mark_bg_unused(cache);
3357 } else if (!alloc && reclaim) {
3358 btrfs_mark_bg_to_reclaim(cache);
3359 }
3360
3361 btrfs_put_block_group(cache);
3362 total -= num_bytes;
3363 bytenr += num_bytes;
3364 }
3365
3366
3367 btrfs_update_delayed_refs_rsv(trans);
3368 return ret;
3369 }
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383 int btrfs_add_reserved_bytes(struct btrfs_block_group *cache,
3384 u64 ram_bytes, u64 num_bytes, int delalloc)
3385 {
3386 struct btrfs_space_info *space_info = cache->space_info;
3387 int ret = 0;
3388
3389 spin_lock(&space_info->lock);
3390 spin_lock(&cache->lock);
3391 if (cache->ro) {
3392 ret = -EAGAIN;
3393 } else {
3394 cache->reserved += num_bytes;
3395 space_info->bytes_reserved += num_bytes;
3396 trace_btrfs_space_reservation(cache->fs_info, "space_info",
3397 space_info->flags, num_bytes, 1);
3398 btrfs_space_info_update_bytes_may_use(cache->fs_info,
3399 space_info, -ram_bytes);
3400 if (delalloc)
3401 cache->delalloc_bytes += num_bytes;
3402
3403
3404
3405
3406
3407 if (num_bytes < ram_bytes)
3408 btrfs_try_granting_tickets(cache->fs_info, space_info);
3409 }
3410 spin_unlock(&cache->lock);
3411 spin_unlock(&space_info->lock);
3412 return ret;
3413 }
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426 void btrfs_free_reserved_bytes(struct btrfs_block_group *cache,
3427 u64 num_bytes, int delalloc)
3428 {
3429 struct btrfs_space_info *space_info = cache->space_info;
3430
3431 spin_lock(&space_info->lock);
3432 spin_lock(&cache->lock);
3433 if (cache->ro)
3434 space_info->bytes_readonly += num_bytes;
3435 cache->reserved -= num_bytes;
3436 space_info->bytes_reserved -= num_bytes;
3437 space_info->max_extent_size = 0;
3438
3439 if (delalloc)
3440 cache->delalloc_bytes -= num_bytes;
3441 spin_unlock(&cache->lock);
3442
3443 btrfs_try_granting_tickets(cache->fs_info, space_info);
3444 spin_unlock(&space_info->lock);
3445 }
3446
3447 static void force_metadata_allocation(struct btrfs_fs_info *info)
3448 {
3449 struct list_head *head = &info->space_info;
3450 struct btrfs_space_info *found;
3451
3452 list_for_each_entry(found, head, list) {
3453 if (found->flags & BTRFS_BLOCK_GROUP_METADATA)
3454 found->force_alloc = CHUNK_ALLOC_FORCE;
3455 }
3456 }
3457
3458 static int should_alloc_chunk(struct btrfs_fs_info *fs_info,
3459 struct btrfs_space_info *sinfo, int force)
3460 {
3461 u64 bytes_used = btrfs_space_info_used(sinfo, false);
3462 u64 thresh;
3463
3464 if (force == CHUNK_ALLOC_FORCE)
3465 return 1;
3466
3467
3468
3469
3470
3471 if (force == CHUNK_ALLOC_LIMITED) {
3472 thresh = btrfs_super_total_bytes(fs_info->super_copy);
3473 thresh = max_t(u64, SZ_64M, div_factor_fine(thresh, 1));
3474
3475 if (sinfo->total_bytes - bytes_used < thresh)
3476 return 1;
3477 }
3478
3479 if (bytes_used + SZ_2M < div_factor(sinfo->total_bytes, 8))
3480 return 0;
3481 return 1;
3482 }
3483
3484 int btrfs_force_chunk_alloc(struct btrfs_trans_handle *trans, u64 type)
3485 {
3486 u64 alloc_flags = btrfs_get_alloc_profile(trans->fs_info, type);
3487
3488 return btrfs_chunk_alloc(trans, alloc_flags, CHUNK_ALLOC_FORCE);
3489 }
3490
3491 static struct btrfs_block_group *do_chunk_alloc(struct btrfs_trans_handle *trans, u64 flags)
3492 {
3493 struct btrfs_block_group *bg;
3494 int ret;
3495
3496
3497
3498
3499
3500
3501
3502 check_system_chunk(trans, flags);
3503
3504 bg = btrfs_create_chunk(trans, flags);
3505 if (IS_ERR(bg)) {
3506 ret = PTR_ERR(bg);
3507 goto out;
3508 }
3509
3510 ret = btrfs_chunk_alloc_add_chunk_item(trans, bg);
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549 if (ret == -ENOSPC) {
3550 const u64 sys_flags = btrfs_system_alloc_profile(trans->fs_info);
3551 struct btrfs_block_group *sys_bg;
3552
3553 sys_bg = btrfs_create_chunk(trans, sys_flags);
3554 if (IS_ERR(sys_bg)) {
3555 ret = PTR_ERR(sys_bg);
3556 btrfs_abort_transaction(trans, ret);
3557 goto out;
3558 }
3559
3560 ret = btrfs_chunk_alloc_add_chunk_item(trans, sys_bg);
3561 if (ret) {
3562 btrfs_abort_transaction(trans, ret);
3563 goto out;
3564 }
3565
3566 ret = btrfs_chunk_alloc_add_chunk_item(trans, bg);
3567 if (ret) {
3568 btrfs_abort_transaction(trans, ret);
3569 goto out;
3570 }
3571 } else if (ret) {
3572 btrfs_abort_transaction(trans, ret);
3573 goto out;
3574 }
3575 out:
3576 btrfs_trans_release_chunk_metadata(trans);
3577
3578 if (ret)
3579 return ERR_PTR(ret);
3580
3581 btrfs_get_block_group(bg);
3582 return bg;
3583 }
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692 int btrfs_chunk_alloc(struct btrfs_trans_handle *trans, u64 flags,
3693 enum btrfs_chunk_alloc_enum force)
3694 {
3695 struct btrfs_fs_info *fs_info = trans->fs_info;
3696 struct btrfs_space_info *space_info;
3697 struct btrfs_block_group *ret_bg;
3698 bool wait_for_alloc = false;
3699 bool should_alloc = false;
3700 bool from_extent_allocation = false;
3701 int ret = 0;
3702
3703 if (force == CHUNK_ALLOC_FORCE_FOR_EXTENT) {
3704 from_extent_allocation = true;
3705 force = CHUNK_ALLOC_FORCE;
3706 }
3707
3708
3709 if (trans->allocating_chunk)
3710 return -ENOSPC;
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732 if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
3733 return -ENOSPC;
3734
3735 space_info = btrfs_find_space_info(fs_info, flags);
3736 ASSERT(space_info);
3737
3738 do {
3739 spin_lock(&space_info->lock);
3740 if (force < space_info->force_alloc)
3741 force = space_info->force_alloc;
3742 should_alloc = should_alloc_chunk(fs_info, space_info, force);
3743 if (space_info->full) {
3744
3745 if (should_alloc)
3746 ret = -ENOSPC;
3747 else
3748 ret = 0;
3749 spin_unlock(&space_info->lock);
3750 return ret;
3751 } else if (!should_alloc) {
3752 spin_unlock(&space_info->lock);
3753 return 0;
3754 } else if (space_info->chunk_alloc) {
3755
3756
3757
3758
3759
3760
3761 wait_for_alloc = true;
3762 force = CHUNK_ALLOC_NO_FORCE;
3763 spin_unlock(&space_info->lock);
3764 mutex_lock(&fs_info->chunk_mutex);
3765 mutex_unlock(&fs_info->chunk_mutex);
3766 } else {
3767
3768 space_info->chunk_alloc = 1;
3769 wait_for_alloc = false;
3770 spin_unlock(&space_info->lock);
3771 }
3772
3773 cond_resched();
3774 } while (wait_for_alloc);
3775
3776 mutex_lock(&fs_info->chunk_mutex);
3777 trans->allocating_chunk = true;
3778
3779
3780
3781
3782
3783 if (btrfs_mixed_space_info(space_info))
3784 flags |= (BTRFS_BLOCK_GROUP_DATA | BTRFS_BLOCK_GROUP_METADATA);
3785
3786
3787
3788
3789
3790
3791 if (flags & BTRFS_BLOCK_GROUP_DATA && fs_info->metadata_ratio) {
3792 fs_info->data_chunk_allocations++;
3793 if (!(fs_info->data_chunk_allocations %
3794 fs_info->metadata_ratio))
3795 force_metadata_allocation(fs_info);
3796 }
3797
3798 ret_bg = do_chunk_alloc(trans, flags);
3799 trans->allocating_chunk = false;
3800
3801 if (IS_ERR(ret_bg)) {
3802 ret = PTR_ERR(ret_bg);
3803 } else if (from_extent_allocation) {
3804
3805
3806
3807
3808 btrfs_zone_activate(ret_bg);
3809 }
3810
3811 if (!ret)
3812 btrfs_put_block_group(ret_bg);
3813
3814 spin_lock(&space_info->lock);
3815 if (ret < 0) {
3816 if (ret == -ENOSPC)
3817 space_info->full = 1;
3818 else
3819 goto out;
3820 } else {
3821 ret = 1;
3822 space_info->max_extent_size = 0;
3823 }
3824
3825 space_info->force_alloc = CHUNK_ALLOC_NO_FORCE;
3826 out:
3827 space_info->chunk_alloc = 0;
3828 spin_unlock(&space_info->lock);
3829 mutex_unlock(&fs_info->chunk_mutex);
3830
3831 return ret;
3832 }
3833
3834 static u64 get_profile_num_devs(struct btrfs_fs_info *fs_info, u64 type)
3835 {
3836 u64 num_dev;
3837
3838 num_dev = btrfs_raid_array[btrfs_bg_flags_to_raid_index(type)].devs_max;
3839 if (!num_dev)
3840 num_dev = fs_info->fs_devices->rw_devices;
3841
3842 return num_dev;
3843 }
3844
3845 static void reserve_chunk_space(struct btrfs_trans_handle *trans,
3846 u64 bytes,
3847 u64 type)
3848 {
3849 struct btrfs_fs_info *fs_info = trans->fs_info;
3850 struct btrfs_space_info *info;
3851 u64 left;
3852 int ret = 0;
3853
3854
3855
3856
3857
3858 lockdep_assert_held(&fs_info->chunk_mutex);
3859
3860 info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_SYSTEM);
3861 spin_lock(&info->lock);
3862 left = info->total_bytes - btrfs_space_info_used(info, true);
3863 spin_unlock(&info->lock);
3864
3865 if (left < bytes && btrfs_test_opt(fs_info, ENOSPC_DEBUG)) {
3866 btrfs_info(fs_info, "left=%llu, need=%llu, flags=%llu",
3867 left, bytes, type);
3868 btrfs_dump_space_info(fs_info, info, 0, 0);
3869 }
3870
3871 if (left < bytes) {
3872 u64 flags = btrfs_system_alloc_profile(fs_info);
3873 struct btrfs_block_group *bg;
3874
3875
3876
3877
3878
3879
3880
3881 bg = btrfs_create_chunk(trans, flags);
3882 if (IS_ERR(bg)) {
3883 ret = PTR_ERR(bg);
3884 } else {
3885
3886
3887
3888
3889 ret = btrfs_zoned_activate_one_bg(fs_info, info, true);
3890 if (ret < 0)
3891 return;
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903 btrfs_chunk_alloc_add_chunk_item(trans, bg);
3904 }
3905 }
3906
3907 if (!ret) {
3908 ret = btrfs_block_rsv_add(fs_info,
3909 &fs_info->chunk_block_rsv,
3910 bytes, BTRFS_RESERVE_NO_FLUSH);
3911 if (!ret)
3912 trans->chunk_bytes_reserved += bytes;
3913 }
3914 }
3915
3916
3917
3918
3919
3920 void check_system_chunk(struct btrfs_trans_handle *trans, u64 type)
3921 {
3922 struct btrfs_fs_info *fs_info = trans->fs_info;
3923 const u64 num_devs = get_profile_num_devs(fs_info, type);
3924 u64 bytes;
3925
3926
3927 bytes = btrfs_calc_metadata_size(fs_info, num_devs) +
3928 btrfs_calc_insert_metadata_size(fs_info, 1);
3929
3930 reserve_chunk_space(trans, bytes, type);
3931 }
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949 void btrfs_reserve_chunk_metadata(struct btrfs_trans_handle *trans,
3950 bool is_item_insertion)
3951 {
3952 struct btrfs_fs_info *fs_info = trans->fs_info;
3953 u64 bytes;
3954
3955 if (is_item_insertion)
3956 bytes = btrfs_calc_insert_metadata_size(fs_info, 1);
3957 else
3958 bytes = btrfs_calc_metadata_size(fs_info, 1);
3959
3960 mutex_lock(&fs_info->chunk_mutex);
3961 reserve_chunk_space(trans, bytes, BTRFS_BLOCK_GROUP_SYSTEM);
3962 mutex_unlock(&fs_info->chunk_mutex);
3963 }
3964
3965 void btrfs_put_block_group_cache(struct btrfs_fs_info *info)
3966 {
3967 struct btrfs_block_group *block_group;
3968 u64 last = 0;
3969
3970 while (1) {
3971 struct inode *inode;
3972
3973 block_group = btrfs_lookup_first_block_group(info, last);
3974 while (block_group) {
3975 btrfs_wait_block_group_cache_done(block_group);
3976 spin_lock(&block_group->lock);
3977 if (block_group->iref)
3978 break;
3979 spin_unlock(&block_group->lock);
3980 block_group = btrfs_next_block_group(block_group);
3981 }
3982 if (!block_group) {
3983 if (last == 0)
3984 break;
3985 last = 0;
3986 continue;
3987 }
3988
3989 inode = block_group->inode;
3990 block_group->iref = 0;
3991 block_group->inode = NULL;
3992 spin_unlock(&block_group->lock);
3993 ASSERT(block_group->io_ctl.inode == NULL);
3994 iput(inode);
3995 last = block_group->start + block_group->length;
3996 btrfs_put_block_group(block_group);
3997 }
3998 }
3999
4000
4001
4002
4003
4004
4005 int btrfs_free_block_groups(struct btrfs_fs_info *info)
4006 {
4007 struct btrfs_block_group *block_group;
4008 struct btrfs_space_info *space_info;
4009 struct btrfs_caching_control *caching_ctl;
4010 struct rb_node *n;
4011
4012 write_lock(&info->block_group_cache_lock);
4013 while (!list_empty(&info->caching_block_groups)) {
4014 caching_ctl = list_entry(info->caching_block_groups.next,
4015 struct btrfs_caching_control, list);
4016 list_del(&caching_ctl->list);
4017 btrfs_put_caching_control(caching_ctl);
4018 }
4019 write_unlock(&info->block_group_cache_lock);
4020
4021 spin_lock(&info->unused_bgs_lock);
4022 while (!list_empty(&info->unused_bgs)) {
4023 block_group = list_first_entry(&info->unused_bgs,
4024 struct btrfs_block_group,
4025 bg_list);
4026 list_del_init(&block_group->bg_list);
4027 btrfs_put_block_group(block_group);
4028 }
4029
4030 while (!list_empty(&info->reclaim_bgs)) {
4031 block_group = list_first_entry(&info->reclaim_bgs,
4032 struct btrfs_block_group,
4033 bg_list);
4034 list_del_init(&block_group->bg_list);
4035 btrfs_put_block_group(block_group);
4036 }
4037 spin_unlock(&info->unused_bgs_lock);
4038
4039 spin_lock(&info->zone_active_bgs_lock);
4040 while (!list_empty(&info->zone_active_bgs)) {
4041 block_group = list_first_entry(&info->zone_active_bgs,
4042 struct btrfs_block_group,
4043 active_bg_list);
4044 list_del_init(&block_group->active_bg_list);
4045 btrfs_put_block_group(block_group);
4046 }
4047 spin_unlock(&info->zone_active_bgs_lock);
4048
4049 write_lock(&info->block_group_cache_lock);
4050 while ((n = rb_last(&info->block_group_cache_tree.rb_root)) != NULL) {
4051 block_group = rb_entry(n, struct btrfs_block_group,
4052 cache_node);
4053 rb_erase_cached(&block_group->cache_node,
4054 &info->block_group_cache_tree);
4055 RB_CLEAR_NODE(&block_group->cache_node);
4056 write_unlock(&info->block_group_cache_lock);
4057
4058 down_write(&block_group->space_info->groups_sem);
4059 list_del(&block_group->list);
4060 up_write(&block_group->space_info->groups_sem);
4061
4062
4063
4064
4065
4066 if (block_group->cached == BTRFS_CACHE_NO ||
4067 block_group->cached == BTRFS_CACHE_ERROR)
4068 btrfs_free_excluded_extents(block_group);
4069
4070 btrfs_remove_free_space_cache(block_group);
4071 ASSERT(block_group->cached != BTRFS_CACHE_STARTED);
4072 ASSERT(list_empty(&block_group->dirty_list));
4073 ASSERT(list_empty(&block_group->io_list));
4074 ASSERT(list_empty(&block_group->bg_list));
4075 ASSERT(refcount_read(&block_group->refs) == 1);
4076 ASSERT(block_group->swap_extents == 0);
4077 btrfs_put_block_group(block_group);
4078
4079 write_lock(&info->block_group_cache_lock);
4080 }
4081 write_unlock(&info->block_group_cache_lock);
4082
4083 btrfs_release_global_block_rsv(info);
4084
4085 while (!list_empty(&info->space_info)) {
4086 space_info = list_entry(info->space_info.next,
4087 struct btrfs_space_info,
4088 list);
4089
4090
4091
4092
4093
4094 if (WARN_ON(space_info->bytes_pinned > 0 ||
4095 space_info->bytes_may_use > 0))
4096 btrfs_dump_space_info(info, space_info, 0, 0);
4097
4098
4099
4100
4101
4102
4103
4104
4105 if (!(space_info->flags & BTRFS_BLOCK_GROUP_METADATA) ||
4106 !BTRFS_FS_LOG_CLEANUP_ERROR(info)) {
4107 if (WARN_ON(space_info->bytes_reserved > 0))
4108 btrfs_dump_space_info(info, space_info, 0, 0);
4109 }
4110
4111 WARN_ON(space_info->reclaim_size > 0);
4112 list_del(&space_info->list);
4113 btrfs_sysfs_remove_space_info(space_info);
4114 }
4115 return 0;
4116 }
4117
4118 void btrfs_freeze_block_group(struct btrfs_block_group *cache)
4119 {
4120 atomic_inc(&cache->frozen);
4121 }
4122
4123 void btrfs_unfreeze_block_group(struct btrfs_block_group *block_group)
4124 {
4125 struct btrfs_fs_info *fs_info = block_group->fs_info;
4126 struct extent_map_tree *em_tree;
4127 struct extent_map *em;
4128 bool cleanup;
4129
4130 spin_lock(&block_group->lock);
4131 cleanup = (atomic_dec_and_test(&block_group->frozen) &&
4132 block_group->removed);
4133 spin_unlock(&block_group->lock);
4134
4135 if (cleanup) {
4136 em_tree = &fs_info->mapping_tree;
4137 write_lock(&em_tree->lock);
4138 em = lookup_extent_mapping(em_tree, block_group->start,
4139 1);
4140 BUG_ON(!em);
4141 remove_extent_mapping(em_tree, em);
4142 write_unlock(&em_tree->lock);
4143
4144
4145 free_extent_map(em);
4146 free_extent_map(em);
4147
4148
4149
4150
4151
4152
4153 __btrfs_remove_free_space_cache(block_group->free_space_ctl);
4154 }
4155 }
4156
4157 bool btrfs_inc_block_group_swap_extents(struct btrfs_block_group *bg)
4158 {
4159 bool ret = true;
4160
4161 spin_lock(&bg->lock);
4162 if (bg->ro)
4163 ret = false;
4164 else
4165 bg->swap_extents++;
4166 spin_unlock(&bg->lock);
4167
4168 return ret;
4169 }
4170
4171 void btrfs_dec_block_group_swap_extents(struct btrfs_block_group *bg, int amount)
4172 {
4173 spin_lock(&bg->lock);
4174 ASSERT(!bg->ro);
4175 ASSERT(bg->swap_extents >= amount);
4176 bg->swap_extents -= amount;
4177 spin_unlock(&bg->lock);
4178 }