We've forgotten to clear extent states in pinned tree, which will results in space counter mismatch and memory leak: WARNING: at fs/btrfs/extent-tree.c:7537 btrfs_free_block_groups+0x1f3/0x2e0 [btrfs]() ... space_info 2 has 8380416 free, is not full space_info total=12582912, used=4096, pinned=4096, reserved=0, may_use=0, readonly=4194304 btrfs state leak: start 29364224 end 29376511 state 1 in tree ffff880075f20090 refs 1 ...
Unified · Split
| @@ -3601,6 +3601,8 @@ void btrfs_cleanup_one_transaction(struct btrfs_transaction *cur_trans, · 3600 unmodified lines | |||
| 3601 | 3601 | ||
| 3602 | btrfs_destroy_marked_extents(root, &cur_trans->dirty_pages, | 3602 | btrfs_destroy_marked_extents(root, &cur_trans->dirty_pages, |
| 3603 | EXTENT_DIRTY); | 3603 | EXTENT_DIRTY); |
| 3604 | btrfs_destroy_pinned_extent(root, | ||
| 3605 | root->fs_info->pinned_extents); | ||
| 3604 | 3606 | ||
| 3605 | /* | 3607 | /* |
| 3606 | memset(cur_trans, 0, sizeof(*cur_trans)); | 3608 | memset(cur_trans, 0, sizeof(*cur_trans)); |