aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosef Bacik <josef@redhat.com>2011-08-05 10:25:38 -0400
committerJosef Bacik <josef@redhat.com>2011-10-19 15:12:32 -0400
commit37be25bcb6d731914e126f8de59c4367f0d66b80 (patch)
treed9e78eb4440f60a7697f8f7c56a37c163734cf66
parentdba68306f3fae681b1005137f130f5bcfdfed34a (diff)
Btrfs: kill the durable block rsv stuff
This is confusing code and isn't used by anything anymore, so delete it. Signed-off-by: Josef Bacik <josef@redhat.com>
-rw-r--r--fs/btrfs/ctree.h11
-rw-r--r--fs/btrfs/disk-io.c2
-rw-r--r--fs/btrfs/extent-tree.c100
-rw-r--r--fs/btrfs/inode.c4
-rw-r--r--fs/btrfs/relocation.c1
5 files changed, 17 insertions, 101 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 4ef777e85c8..c5ceba4078c 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -772,13 +772,10 @@ struct btrfs_space_info {
772struct btrfs_block_rsv { 772struct btrfs_block_rsv {
773 u64 size; 773 u64 size;
774 u64 reserved; 774 u64 reserved;
775 u64 freed[2];
776 struct btrfs_space_info *space_info; 775 struct btrfs_space_info *space_info;
777 struct list_head list;
778 spinlock_t lock; 776 spinlock_t lock;
779 atomic_t usage; 777 atomic_t usage;
780 unsigned int priority:8; 778 unsigned int priority:8;
781 unsigned int durable:1;
782 unsigned int refill_used:1; 779 unsigned int refill_used:1;
783 unsigned int full:1; 780 unsigned int full:1;
784}; 781};
@@ -840,7 +837,6 @@ struct btrfs_block_group_cache {
840 spinlock_t lock; 837 spinlock_t lock;
841 u64 pinned; 838 u64 pinned;
842 u64 reserved; 839 u64 reserved;
843 u64 reserved_pinned;
844 u64 bytes_super; 840 u64 bytes_super;
845 u64 flags; 841 u64 flags;
846 u64 sectorsize; 842 u64 sectorsize;
@@ -919,11 +915,6 @@ struct btrfs_fs_info {
919 915
920 struct btrfs_block_rsv empty_block_rsv; 916 struct btrfs_block_rsv empty_block_rsv;
921 917
922 /* list of block reservations that cross multiple transactions */
923 struct list_head durable_block_rsv_list;
924
925 struct mutex durable_block_rsv_mutex;
926
927 u64 generation; 918 u64 generation;
928 u64 last_trans_committed; 919 u64 last_trans_committed;
929 920
@@ -2238,8 +2229,6 @@ void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv);
2238struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root); 2229struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root);
2239void btrfs_free_block_rsv(struct btrfs_root *root, 2230void btrfs_free_block_rsv(struct btrfs_root *root,
2240 struct btrfs_block_rsv *rsv); 2231 struct btrfs_block_rsv *rsv);
2241void btrfs_add_durable_block_rsv(struct btrfs_fs_info *fs_info,
2242 struct btrfs_block_rsv *rsv);
2243int btrfs_block_rsv_add(struct btrfs_trans_handle *trans, 2232int btrfs_block_rsv_add(struct btrfs_trans_handle *trans,
2244 struct btrfs_root *root, 2233 struct btrfs_root *root,
2245 struct btrfs_block_rsv *block_rsv, 2234 struct btrfs_block_rsv *block_rsv,
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 07b3ac662e1..0b5643a68d5 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -1665,8 +1665,6 @@ struct btrfs_root *open_ctree(struct super_block *sb,
1665 btrfs_init_block_rsv(&fs_info->trans_block_rsv); 1665 btrfs_init_block_rsv(&fs_info->trans_block_rsv);
1666 btrfs_init_block_rsv(&fs_info->chunk_block_rsv); 1666 btrfs_init_block_rsv(&fs_info->chunk_block_rsv);
1667 btrfs_init_block_rsv(&fs_info->empty_block_rsv); 1667 btrfs_init_block_rsv(&fs_info->empty_block_rsv);
1668 INIT_LIST_HEAD(&fs_info->durable_block_rsv_list);
1669 mutex_init(&fs_info->durable_block_rsv_mutex);
1670 atomic_set(&fs_info->nr_async_submits, 0); 1668 atomic_set(&fs_info->nr_async_submits, 0);
1671 atomic_set(&fs_info->async_delalloc_pages, 0); 1669 atomic_set(&fs_info->async_delalloc_pages, 0);
1672 atomic_set(&fs_info->async_submit_draining, 0); 1670 atomic_set(&fs_info->async_submit_draining, 0);
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 4add1ac2dda..30c0558eae8 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -121,7 +121,6 @@ void btrfs_put_block_group(struct btrfs_block_group_cache *cache)
121 if (atomic_dec_and_test(&cache->count)) { 121 if (atomic_dec_and_test(&cache->count)) {
122 WARN_ON(cache->pinned > 0); 122 WARN_ON(cache->pinned > 0);
123 WARN_ON(cache->reserved > 0); 123 WARN_ON(cache->reserved > 0);
124 WARN_ON(cache->reserved_pinned > 0);
125 kfree(cache->free_space_ctl); 124 kfree(cache->free_space_ctl);
126 kfree(cache); 125 kfree(cache);
127 } 126 }
@@ -3662,7 +3661,6 @@ void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv)
3662 spin_lock_init(&rsv->lock); 3661 spin_lock_init(&rsv->lock);
3663 atomic_set(&rsv->usage, 1); 3662 atomic_set(&rsv->usage, 1);
3664 rsv->priority = 6; 3663 rsv->priority = 6;
3665 INIT_LIST_HEAD(&rsv->list);
3666} 3664}
3667 3665
3668struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root) 3666struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root)
@@ -3685,25 +3683,10 @@ void btrfs_free_block_rsv(struct btrfs_root *root,
3685{ 3683{
3686 if (rsv && atomic_dec_and_test(&rsv->usage)) { 3684 if (rsv && atomic_dec_and_test(&rsv->usage)) {
3687 btrfs_block_rsv_release(root, rsv, (u64)-1); 3685 btrfs_block_rsv_release(root, rsv, (u64)-1);
3688 if (!rsv->durable) 3686 kfree(rsv);
3689 kfree(rsv);
3690 } 3687 }
3691} 3688}
3692 3689
3693/*
3694 * make the block_rsv struct be able to capture freed space.
3695 * the captured space will re-add to the the block_rsv struct
3696 * after transaction commit
3697 */
3698void btrfs_add_durable_block_rsv(struct btrfs_fs_info *fs_info,
3699 struct btrfs_block_rsv *block_rsv)
3700{
3701 block_rsv->durable = 1;
3702 mutex_lock(&fs_info->durable_block_rsv_mutex);
3703 list_add_tail(&block_rsv->list, &fs_info->durable_block_rsv_list);
3704 mutex_unlock(&fs_info->durable_block_rsv_mutex);
3705}
3706
3707int btrfs_block_rsv_add(struct btrfs_trans_handle *trans, 3690int btrfs_block_rsv_add(struct btrfs_trans_handle *trans,
3708 struct btrfs_root *root, 3691 struct btrfs_root *root,
3709 struct btrfs_block_rsv *block_rsv, 3692 struct btrfs_block_rsv *block_rsv,
@@ -3745,9 +3728,7 @@ int btrfs_block_rsv_check(struct btrfs_trans_handle *trans,
3745 ret = 0; 3728 ret = 0;
3746 } else { 3729 } else {
3747 num_bytes -= block_rsv->reserved; 3730 num_bytes -= block_rsv->reserved;
3748 if (block_rsv->durable && 3731 commit_trans = 1;
3749 block_rsv->freed[0] + block_rsv->freed[1] >= num_bytes)
3750 commit_trans = 1;
3751 } 3732 }
3752 spin_unlock(&block_rsv->lock); 3733 spin_unlock(&block_rsv->lock);
3753 if (!ret) 3734 if (!ret)
@@ -3763,8 +3744,18 @@ int btrfs_block_rsv_check(struct btrfs_trans_handle *trans,
3763 } 3744 }
3764 3745
3765 if (commit_trans) { 3746 if (commit_trans) {
3747 struct btrfs_space_info *sinfo = block_rsv->space_info;
3748
3766 if (trans) 3749 if (trans)
3767 return -EAGAIN; 3750 return -EAGAIN;
3751
3752 spin_lock(&sinfo->lock);
3753 if (sinfo->bytes_pinned < num_bytes) {
3754 spin_unlock(&sinfo->lock);
3755 return -ENOSPC;
3756 }
3757 spin_unlock(&sinfo->lock);
3758
3768 trans = btrfs_join_transaction(root); 3759 trans = btrfs_join_transaction(root);
3769 BUG_ON(IS_ERR(trans)); 3760 BUG_ON(IS_ERR(trans));
3770 ret = btrfs_commit_transaction(trans, root); 3761 ret = btrfs_commit_transaction(trans, root);
@@ -3885,10 +3876,6 @@ static void init_global_block_rsv(struct btrfs_fs_info *fs_info)
3885 fs_info->tree_root->block_rsv = &fs_info->global_block_rsv; 3876 fs_info->tree_root->block_rsv = &fs_info->global_block_rsv;
3886 fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv; 3877 fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv;
3887 3878
3888 btrfs_add_durable_block_rsv(fs_info, &fs_info->global_block_rsv);
3889
3890 btrfs_add_durable_block_rsv(fs_info, &fs_info->delalloc_block_rsv);
3891
3892 update_global_block_rsv(fs_info); 3879 update_global_block_rsv(fs_info);
3893} 3880}
3894 3881
@@ -4447,13 +4434,8 @@ static int unpin_extent_range(struct btrfs_root *root, u64 start, u64 end)
4447 spin_lock(&cache->lock); 4434 spin_lock(&cache->lock);
4448 cache->pinned -= len; 4435 cache->pinned -= len;
4449 cache->space_info->bytes_pinned -= len; 4436 cache->space_info->bytes_pinned -= len;
4450 if (cache->ro) { 4437 if (cache->ro)
4451 cache->space_info->bytes_readonly += len; 4438 cache->space_info->bytes_readonly += len;
4452 } else if (cache->reserved_pinned > 0) {
4453 len = min(len, cache->reserved_pinned);
4454 cache->reserved_pinned -= len;
4455 cache->space_info->bytes_may_use += len;
4456 }
4457 spin_unlock(&cache->lock); 4439 spin_unlock(&cache->lock);
4458 spin_unlock(&cache->space_info->lock); 4440 spin_unlock(&cache->space_info->lock);
4459 } 4441 }
@@ -4468,11 +4450,8 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
4468{ 4450{
4469 struct btrfs_fs_info *fs_info = root->fs_info; 4451 struct btrfs_fs_info *fs_info = root->fs_info;
4470 struct extent_io_tree *unpin; 4452 struct extent_io_tree *unpin;
4471 struct btrfs_block_rsv *block_rsv;
4472 struct btrfs_block_rsv *next_rsv;
4473 u64 start; 4453 u64 start;
4474 u64 end; 4454 u64 end;
4475 int idx;
4476 int ret; 4455 int ret;
4477 4456
4478 if (fs_info->pinned_extents == &fs_info->freed_extents[0]) 4457 if (fs_info->pinned_extents == &fs_info->freed_extents[0])
@@ -4495,30 +4474,6 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
4495 cond_resched(); 4474 cond_resched();
4496 } 4475 }
4497 4476
4498 mutex_lock(&fs_info->durable_block_rsv_mutex);
4499 list_for_each_entry_safe(block_rsv, next_rsv,
4500 &fs_info->durable_block_rsv_list, list) {
4501
4502 idx = trans->transid & 0x1;
4503 if (block_rsv->freed[idx] > 0) {
4504 block_rsv_add_bytes(block_rsv,
4505 block_rsv->freed[idx], 0);
4506 block_rsv->freed[idx] = 0;
4507 }
4508 if (atomic_read(&block_rsv->usage) == 0) {
4509 btrfs_block_rsv_release(root, block_rsv, (u64)-1);
4510
4511 if (block_rsv->freed[0] == 0 &&
4512 block_rsv->freed[1] == 0) {
4513 list_del_init(&block_rsv->list);
4514 kfree(block_rsv);
4515 }
4516 } else {
4517 btrfs_block_rsv_release(root, block_rsv, 0);
4518 }
4519 }
4520 mutex_unlock(&fs_info->durable_block_rsv_mutex);
4521
4522 return 0; 4477 return 0;
4523} 4478}
4524 4479
@@ -4820,36 +4775,18 @@ void btrfs_free_tree_block(struct btrfs_trans_handle *trans,
4820 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { 4775 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) {
4821 ret = check_ref_cleanup(trans, root, buf->start); 4776 ret = check_ref_cleanup(trans, root, buf->start);
4822 if (!ret) 4777 if (!ret)
4823 goto pin; 4778 goto out;
4824 } 4779 }
4825 4780
4826 if (btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN)) { 4781 if (btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN)) {
4827 pin_down_extent(root, cache, buf->start, buf->len, 1); 4782 pin_down_extent(root, cache, buf->start, buf->len, 1);
4828 goto pin; 4783 goto out;
4829 } 4784 }
4830 4785
4831 WARN_ON(test_bit(EXTENT_BUFFER_DIRTY, &buf->bflags)); 4786 WARN_ON(test_bit(EXTENT_BUFFER_DIRTY, &buf->bflags));
4832 4787
4833 btrfs_add_free_space(cache, buf->start, buf->len); 4788 btrfs_add_free_space(cache, buf->start, buf->len);
4834 btrfs_update_reserved_bytes(cache, buf->len, RESERVE_FREE); 4789 btrfs_update_reserved_bytes(cache, buf->len, RESERVE_FREE);
4835
4836 goto out;
4837 }
4838pin:
4839 if (block_rsv->durable && !cache->ro) {
4840 ret = 0;
4841 spin_lock(&cache->lock);
4842 if (!cache->ro) {
4843 cache->reserved_pinned += buf->len;
4844 ret = 1;
4845 }
4846 spin_unlock(&cache->lock);
4847
4848 if (ret) {
4849 spin_lock(&block_rsv->lock);
4850 block_rsv->freed[trans->transid & 0x1] += buf->len;
4851 spin_unlock(&block_rsv->lock);
4852 }
4853 } 4790 }
4854out: 4791out:
4855 /* 4792 /*
@@ -6705,12 +6642,9 @@ static int set_block_group_ro(struct btrfs_block_group_cache *cache, int force)
6705 cache->bytes_super - btrfs_block_group_used(&cache->item); 6642 cache->bytes_super - btrfs_block_group_used(&cache->item);
6706 6643
6707 if (sinfo->bytes_used + sinfo->bytes_reserved + sinfo->bytes_pinned + 6644 if (sinfo->bytes_used + sinfo->bytes_reserved + sinfo->bytes_pinned +
6708 sinfo->bytes_may_use + sinfo->bytes_readonly + 6645 sinfo->bytes_may_use + sinfo->bytes_readonly + num_bytes +
6709 cache->reserved_pinned + num_bytes + min_allocable_bytes <= 6646 min_allocable_bytes <= sinfo->total_bytes) {
6710 sinfo->total_bytes) {
6711 sinfo->bytes_readonly += num_bytes; 6647 sinfo->bytes_readonly += num_bytes;
6712 sinfo->bytes_may_use += cache->reserved_pinned;
6713 cache->reserved_pinned = 0;
6714 cache->ro = 1; 6648 cache->ro = 1;
6715 ret = 0; 6649 ret = 0;
6716 } 6650 }
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 5f5f8a577e6..6402a41b902 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -2164,9 +2164,6 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode)
2164 } 2164 }
2165 spin_unlock(&root->orphan_lock); 2165 spin_unlock(&root->orphan_lock);
2166 2166
2167 if (block_rsv)
2168 btrfs_add_durable_block_rsv(root->fs_info, block_rsv);
2169
2170 /* grab metadata reservation from transaction handle */ 2167 /* grab metadata reservation from transaction handle */
2171 if (reserve) { 2168 if (reserve) {
2172 ret = btrfs_orphan_reserve_metadata(trans, inode); 2169 ret = btrfs_orphan_reserve_metadata(trans, inode);
@@ -6505,7 +6502,6 @@ static int btrfs_truncate(struct inode *inode)
6505 rsv = btrfs_alloc_block_rsv(root); 6502 rsv = btrfs_alloc_block_rsv(root);
6506 if (!rsv) 6503 if (!rsv)
6507 return -ENOMEM; 6504 return -ENOMEM;
6508 btrfs_add_durable_block_rsv(root->fs_info, rsv);
6509 6505
6510 trans = btrfs_start_transaction(root, 4); 6506 trans = btrfs_start_transaction(root, 4);
6511 if (IS_ERR(trans)) { 6507 if (IS_ERR(trans)) {
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
index 59bb1764273..545b0435824 100644
--- a/fs/btrfs/relocation.c
+++ b/fs/btrfs/relocation.c
@@ -3651,7 +3651,6 @@ int prepare_to_relocate(struct reloc_control *rc)
3651 return ret; 3651 return ret;
3652 3652
3653 rc->block_rsv->refill_used = 1; 3653 rc->block_rsv->refill_used = 1;
3654 btrfs_add_durable_block_rsv(rc->extent_root->fs_info, rc->block_rsv);
3655 3654
3656 memset(&rc->cluster, 0, sizeof(rc->cluster)); 3655 memset(&rc->cluster, 0, sizeof(rc->cluster));
3657 rc->search_start = rc->block_group->key.objectid; 3656 rc->search_start = rc->block_group->key.objectid;