diff mbox

Btrfs: kill the durable block rsv stuff

Message ID 1312827675-16190-1-git-send-email-josef@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Josef Bacik Aug. 8, 2011, 6:21 p.m. UTC
This is confusing code and isn't used by anything anymore, so delete it.

Signed-off-by: Josef Bacik <josef@redhat.com>
---
 fs/btrfs/ctree.h       |   11 -----
 fs/btrfs/disk-io.c     |    2 -
 fs/btrfs/extent-tree.c |  100 ++++++++---------------------------------------
 fs/btrfs/inode.c       |    4 --
 fs/btrfs/relocation.c  |    1 -
 5 files changed, 17 insertions(+), 101 deletions(-)

Comments

Mitch Harder Aug. 9, 2011, 5:25 p.m. UTC | #1
On Mon, Aug 8, 2011 at 1:21 PM, Josef Bacik <josef@redhat.com> wrote:
> This is confusing code and isn't used by anything anymore, so delete it.
>
> Signed-off-by: Josef Bacik <josef@redhat.com>
> ---
>  fs/btrfs/ctree.h       |   11 -----
>  fs/btrfs/disk-io.c     |    2 -
>  fs/btrfs/extent-tree.c |  100 ++++++++---------------------------------------
>  fs/btrfs/inode.c       |    4 --
>  fs/btrfs/relocation.c  |    1 -
>  5 files changed, 17 insertions(+), 101 deletions(-)
>
> diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
> index 9a2db9e..6071dab 100644
> --- a/fs/btrfs/ctree.h
> +++ b/fs/btrfs/ctree.h
> @@ -772,13 +772,10 @@ struct btrfs_space_info {
>  struct btrfs_block_rsv {
>        u64 size;
>        u64 reserved;
> -       u64 freed[2];
>        struct btrfs_space_info *space_info;
> -       struct list_head list;
>        spinlock_t lock;
>        atomic_t usage;
>        unsigned int priority:8;
> -       unsigned int durable:1;
>        unsigned int refill_used:1;
>        unsigned int full:1;
>  };
> @@ -840,7 +837,6 @@ struct btrfs_block_group_cache {
>        spinlock_t lock;
>        u64 pinned;
>        u64 reserved;
> -       u64 reserved_pinned;
>        u64 bytes_super;
>        u64 flags;
>        u64 sectorsize;
> @@ -919,11 +915,6 @@ struct btrfs_fs_info {
>
>        struct btrfs_block_rsv empty_block_rsv;
>
> -       /* list of block reservations that cross multiple transactions */
> -       struct list_head durable_block_rsv_list;
> -
> -       struct mutex durable_block_rsv_mutex;
> -
>        u64 generation;
>        u64 last_trans_committed;
>
> @@ -2240,8 +2231,6 @@ void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv);
>  struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root);
>  void btrfs_free_block_rsv(struct btrfs_root *root,
>                          struct btrfs_block_rsv *rsv);
> -void btrfs_add_durable_block_rsv(struct btrfs_fs_info *fs_info,
> -                                struct btrfs_block_rsv *rsv);
>  int btrfs_block_rsv_add(struct btrfs_trans_handle *trans,
>                        struct btrfs_root *root,
>                        struct btrfs_block_rsv *block_rsv,
> diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
> index 07b3ac6..0b5643a 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,
>        btrfs_init_block_rsv(&fs_info->trans_block_rsv);
>        btrfs_init_block_rsv(&fs_info->chunk_block_rsv);
>        btrfs_init_block_rsv(&fs_info->empty_block_rsv);
> -       INIT_LIST_HEAD(&fs_info->durable_block_rsv_list);
> -       mutex_init(&fs_info->durable_block_rsv_mutex);
>        atomic_set(&fs_info->nr_async_submits, 0);
>        atomic_set(&fs_info->async_delalloc_pages, 0);
>        atomic_set(&fs_info->async_submit_draining, 0);
> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
> index d30e0b4..fc2686c 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)
>        if (atomic_dec_and_test(&cache->count)) {
>                WARN_ON(cache->pinned > 0);
>                WARN_ON(cache->reserved > 0);
> -               WARN_ON(cache->reserved_pinned > 0);
>                kfree(cache->free_space_ctl);
>                kfree(cache);
>        }
> @@ -3662,7 +3661,6 @@ void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv)
>        spin_lock_init(&rsv->lock);
>        atomic_set(&rsv->usage, 1);
>        rsv->priority = 6;
> -       INIT_LIST_HEAD(&rsv->list);
>  }
>
>  struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root)
> @@ -3685,25 +3683,10 @@ void btrfs_free_block_rsv(struct btrfs_root *root,
>  {
>        if (rsv && atomic_dec_and_test(&rsv->usage)) {
>                btrfs_block_rsv_release(root, rsv, (u64)-1);
> -               if (!rsv->durable)
> -                       kfree(rsv);
> +               kfree(rsv);
>        }
>  }
>
> -/*
> - * make the block_rsv struct be able to capture freed space.
> - * the captured space will re-add to the the block_rsv struct
> - * after transaction commit
> - */
> -void btrfs_add_durable_block_rsv(struct btrfs_fs_info *fs_info,
> -                                struct btrfs_block_rsv *block_rsv)
> -{
> -       block_rsv->durable = 1;
> -       mutex_lock(&fs_info->durable_block_rsv_mutex);
> -       list_add_tail(&block_rsv->list, &fs_info->durable_block_rsv_list);
> -       mutex_unlock(&fs_info->durable_block_rsv_mutex);
> -}
> -
>  int btrfs_block_rsv_add(struct btrfs_trans_handle *trans,
>                        struct btrfs_root *root,
>                        struct btrfs_block_rsv *block_rsv,
> @@ -3745,9 +3728,7 @@ int btrfs_block_rsv_check(struct btrfs_trans_handle *trans,
>                ret = 0;
>        } else {
>                num_bytes -= block_rsv->reserved;
> -               if (block_rsv->durable &&
> -                   block_rsv->freed[0] + block_rsv->freed[1] >= num_bytes)
> -                       commit_trans = 1;
> +               commit_trans = 1;
>        }
>        spin_unlock(&block_rsv->lock);
>        if (!ret)
> @@ -3763,8 +3744,18 @@ int btrfs_block_rsv_check(struct btrfs_trans_handle *trans,
>        }
>
>        if (commit_trans) {
> +               struct btrfs_space_info *sinfo = block_rsv->space_info;
> +
>                if (trans)
>                        return -EAGAIN;
> +
> +               spin_lock(&sinfo->lock);
> +               if (sinfo->bytes_pinned < num_bytes) {
> +                       spin_unlock(&sinfo->lock);
> +                       return -ENOSPC;
> +               }
> +               spin_unlock(&sinfo->lock);
> +
>                trans = btrfs_join_transaction(root);
>                BUG_ON(IS_ERR(trans));
>                ret = btrfs_commit_transaction(trans, root);
> @@ -3885,10 +3876,6 @@ static void init_global_block_rsv(struct btrfs_fs_info *fs_info)
>        fs_info->tree_root->block_rsv = &fs_info->global_block_rsv;
>        fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv;
>
> -       btrfs_add_durable_block_rsv(fs_info, &fs_info->global_block_rsv);
> -
> -       btrfs_add_durable_block_rsv(fs_info, &fs_info->delalloc_block_rsv);
> -
>        update_global_block_rsv(fs_info);
>  }
>
> @@ -4447,13 +4434,8 @@ static int unpin_extent_range(struct btrfs_root *root, u64 start, u64 end)
>                spin_lock(&cache->lock);
>                cache->pinned -= len;
>                cache->space_info->bytes_pinned -= len;
> -               if (cache->ro) {
> +               if (cache->ro)
>                        cache->space_info->bytes_readonly += len;
> -               } else if (cache->reserved_pinned > 0) {
> -                       len = min(len, cache->reserved_pinned);
> -                       cache->reserved_pinned -= len;
> -                       cache->space_info->bytes_may_use += len;
> -               }
>                spin_unlock(&cache->lock);
>                spin_unlock(&cache->space_info->lock);
>        }
> @@ -4468,11 +4450,8 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
>  {
>        struct btrfs_fs_info *fs_info = root->fs_info;
>        struct extent_io_tree *unpin;
> -       struct btrfs_block_rsv *block_rsv;
> -       struct btrfs_block_rsv *next_rsv;
>        u64 start;
>        u64 end;
> -       int idx;
>        int ret;
>
>        if (fs_info->pinned_extents == &fs_info->freed_extents[0])
> @@ -4495,30 +4474,6 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
>                cond_resched();
>        }
>
> -       mutex_lock(&fs_info->durable_block_rsv_mutex);
> -       list_for_each_entry_safe(block_rsv, next_rsv,
> -                                &fs_info->durable_block_rsv_list, list) {
> -
> -               idx = trans->transid & 0x1;
> -               if (block_rsv->freed[idx] > 0) {
> -                       block_rsv_add_bytes(block_rsv,
> -                                           block_rsv->freed[idx], 0);
> -                       block_rsv->freed[idx] = 0;
> -               }
> -               if (atomic_read(&block_rsv->usage) == 0) {
> -                       btrfs_block_rsv_release(root, block_rsv, (u64)-1);
> -
> -                       if (block_rsv->freed[0] == 0 &&
> -                           block_rsv->freed[1] == 0) {
> -                               list_del_init(&block_rsv->list);
> -                               kfree(block_rsv);
> -                       }
> -               } else {
> -                       btrfs_block_rsv_release(root, block_rsv, 0);
> -               }
> -       }
> -       mutex_unlock(&fs_info->durable_block_rsv_mutex);
> -
>        return 0;
>  }
>
> @@ -4820,36 +4775,18 @@ void btrfs_free_tree_block(struct btrfs_trans_handle *trans,
>                if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) {
>                        ret = check_ref_cleanup(trans, root, buf->start);
>                        if (!ret)
> -                               goto pin;
> +                               goto out;
>                }
>
>                if (btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN)) {
>                        pin_down_extent(root, cache, buf->start, buf->len, 1);
> -                       goto pin;
> +                       goto out;
>                }
>
>                WARN_ON(test_bit(EXTENT_BUFFER_DIRTY, &buf->bflags));
>
>                btrfs_add_free_space(cache, buf->start, buf->len);
>                btrfs_update_reserved_bytes(cache, buf->len, RESERVE_FREE);
> -
> -               goto out;
> -       }
> -pin:
> -       if (block_rsv->durable && !cache->ro) {
> -               ret = 0;
> -               spin_lock(&cache->lock);
> -               if (!cache->ro) {
> -                       cache->reserved_pinned += buf->len;
> -                       ret = 1;
> -               }
> -               spin_unlock(&cache->lock);
> -
> -               if (ret) {
> -                       spin_lock(&block_rsv->lock);
> -                       block_rsv->freed[trans->transid & 0x1] += buf->len;
> -                       spin_unlock(&block_rsv->lock);
> -               }
>        }
>  out:
>        /*
> @@ -6699,12 +6636,9 @@ static int set_block_group_ro(struct btrfs_block_group_cache *cache, int force)
>                    cache->bytes_super - btrfs_block_group_used(&cache->item);
>
>        if (sinfo->bytes_used + sinfo->bytes_reserved + sinfo->bytes_pinned +
> -           sinfo->bytes_may_use + sinfo->bytes_readonly +
> -           cache->reserved_pinned + num_bytes + min_allocable_bytes <=
> -           sinfo->total_bytes) {
> +           sinfo->bytes_may_use + sinfo->bytes_readonly + num_bytes +
> +           min_allocable_bytes <= sinfo->total_bytes) {
>                sinfo->bytes_readonly += num_bytes;
> -               sinfo->bytes_may_use += cache->reserved_pinned;
> -               cache->reserved_pinned = 0;
>                cache->ro = 1;
>                ret = 0;
>        }
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index 91d851c..54b11ad 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)
>        }
>        spin_unlock(&root->orphan_lock);
>
> -       if (block_rsv)
> -               btrfs_add_durable_block_rsv(root->fs_info, block_rsv);
> -
>        /* grab metadata reservation from transaction handle */
>        if (reserve) {
>                ret = btrfs_orphan_reserve_metadata(trans, inode);
> @@ -6495,7 +6492,6 @@ static int btrfs_truncate(struct inode *inode)
>        rsv = btrfs_alloc_block_rsv(root);
>        if (!rsv)
>                return -ENOMEM;
> -       btrfs_add_durable_block_rsv(root->fs_info, rsv);
>
>        trans = btrfs_start_transaction(root, 4);
>        if (IS_ERR(trans)) {
> diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
> index 59bb176..545b043 100644
> --- a/fs/btrfs/relocation.c
> +++ b/fs/btrfs/relocation.c
> @@ -3651,7 +3651,6 @@ int prepare_to_relocate(struct reloc_control *rc)
>                return ret;
>
>        rc->block_rsv->refill_used = 1;
> -       btrfs_add_durable_block_rsv(rc->extent_root->fs_info, rc->block_rsv);
>
>        memset(&rc->cluster, 0, sizeof(rc->cluster));
>        rc->search_start = rc->block_group->key.objectid;
> --
> 1.7.5.2
>
> --

Portions of this patch conflict with part of the sub transaction
patches submitted recently bu Lui Bo to the Mailing List.

http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg11628.html

"[PATCH 02/12 v5] Btrfs: introduce sub transaction stuff" modifies
portions of the functions btrfs_finish_extent_commit() and
btrfs_free_tree_block() in fs/btrfs/extent-tree.c that are removed in
this patch.
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 9a2db9e..6071dab 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -772,13 +772,10 @@  struct btrfs_space_info {
 struct btrfs_block_rsv {
 	u64 size;
 	u64 reserved;
-	u64 freed[2];
 	struct btrfs_space_info *space_info;
-	struct list_head list;
 	spinlock_t lock;
 	atomic_t usage;
 	unsigned int priority:8;
-	unsigned int durable:1;
 	unsigned int refill_used:1;
 	unsigned int full:1;
 };
@@ -840,7 +837,6 @@  struct btrfs_block_group_cache {
 	spinlock_t lock;
 	u64 pinned;
 	u64 reserved;
-	u64 reserved_pinned;
 	u64 bytes_super;
 	u64 flags;
 	u64 sectorsize;
@@ -919,11 +915,6 @@  struct btrfs_fs_info {
 
 	struct btrfs_block_rsv empty_block_rsv;
 
-	/* list of block reservations that cross multiple transactions */
-	struct list_head durable_block_rsv_list;
-
-	struct mutex durable_block_rsv_mutex;
-
 	u64 generation;
 	u64 last_trans_committed;
 
@@ -2240,8 +2231,6 @@  void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv);
 struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root);
 void btrfs_free_block_rsv(struct btrfs_root *root,
 			  struct btrfs_block_rsv *rsv);
-void btrfs_add_durable_block_rsv(struct btrfs_fs_info *fs_info,
-				 struct btrfs_block_rsv *rsv);
 int btrfs_block_rsv_add(struct btrfs_trans_handle *trans,
 			struct btrfs_root *root,
 			struct btrfs_block_rsv *block_rsv,
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 07b3ac6..0b5643a 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,
 	btrfs_init_block_rsv(&fs_info->trans_block_rsv);
 	btrfs_init_block_rsv(&fs_info->chunk_block_rsv);
 	btrfs_init_block_rsv(&fs_info->empty_block_rsv);
-	INIT_LIST_HEAD(&fs_info->durable_block_rsv_list);
-	mutex_init(&fs_info->durable_block_rsv_mutex);
 	atomic_set(&fs_info->nr_async_submits, 0);
 	atomic_set(&fs_info->async_delalloc_pages, 0);
 	atomic_set(&fs_info->async_submit_draining, 0);
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index d30e0b4..fc2686c 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)
 	if (atomic_dec_and_test(&cache->count)) {
 		WARN_ON(cache->pinned > 0);
 		WARN_ON(cache->reserved > 0);
-		WARN_ON(cache->reserved_pinned > 0);
 		kfree(cache->free_space_ctl);
 		kfree(cache);
 	}
@@ -3662,7 +3661,6 @@  void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv)
 	spin_lock_init(&rsv->lock);
 	atomic_set(&rsv->usage, 1);
 	rsv->priority = 6;
-	INIT_LIST_HEAD(&rsv->list);
 }
 
 struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root)
@@ -3685,25 +3683,10 @@  void btrfs_free_block_rsv(struct btrfs_root *root,
 {
 	if (rsv && atomic_dec_and_test(&rsv->usage)) {
 		btrfs_block_rsv_release(root, rsv, (u64)-1);
-		if (!rsv->durable)
-			kfree(rsv);
+		kfree(rsv);
 	}
 }
 
-/*
- * make the block_rsv struct be able to capture freed space.
- * the captured space will re-add to the the block_rsv struct
- * after transaction commit
- */
-void btrfs_add_durable_block_rsv(struct btrfs_fs_info *fs_info,
-				 struct btrfs_block_rsv *block_rsv)
-{
-	block_rsv->durable = 1;
-	mutex_lock(&fs_info->durable_block_rsv_mutex);
-	list_add_tail(&block_rsv->list, &fs_info->durable_block_rsv_list);
-	mutex_unlock(&fs_info->durable_block_rsv_mutex);
-}
-
 int btrfs_block_rsv_add(struct btrfs_trans_handle *trans,
 			struct btrfs_root *root,
 			struct btrfs_block_rsv *block_rsv,
@@ -3745,9 +3728,7 @@  int btrfs_block_rsv_check(struct btrfs_trans_handle *trans,
 		ret = 0;
 	} else {
 		num_bytes -= block_rsv->reserved;
-		if (block_rsv->durable &&
-		    block_rsv->freed[0] + block_rsv->freed[1] >= num_bytes)
-			commit_trans = 1;
+		commit_trans = 1;
 	}
 	spin_unlock(&block_rsv->lock);
 	if (!ret)
@@ -3763,8 +3744,18 @@  int btrfs_block_rsv_check(struct btrfs_trans_handle *trans,
 	}
 
 	if (commit_trans) {
+		struct btrfs_space_info *sinfo = block_rsv->space_info;
+
 		if (trans)
 			return -EAGAIN;
+
+		spin_lock(&sinfo->lock);
+		if (sinfo->bytes_pinned < num_bytes) {
+			spin_unlock(&sinfo->lock);
+			return -ENOSPC;
+		}
+		spin_unlock(&sinfo->lock);
+
 		trans = btrfs_join_transaction(root);
 		BUG_ON(IS_ERR(trans));
 		ret = btrfs_commit_transaction(trans, root);
@@ -3885,10 +3876,6 @@  static void init_global_block_rsv(struct btrfs_fs_info *fs_info)
 	fs_info->tree_root->block_rsv = &fs_info->global_block_rsv;
 	fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv;
 
-	btrfs_add_durable_block_rsv(fs_info, &fs_info->global_block_rsv);
-
-	btrfs_add_durable_block_rsv(fs_info, &fs_info->delalloc_block_rsv);
-
 	update_global_block_rsv(fs_info);
 }
 
@@ -4447,13 +4434,8 @@  static int unpin_extent_range(struct btrfs_root *root, u64 start, u64 end)
 		spin_lock(&cache->lock);
 		cache->pinned -= len;
 		cache->space_info->bytes_pinned -= len;
-		if (cache->ro) {
+		if (cache->ro)
 			cache->space_info->bytes_readonly += len;
-		} else if (cache->reserved_pinned > 0) {
-			len = min(len, cache->reserved_pinned);
-			cache->reserved_pinned -= len;
-			cache->space_info->bytes_may_use += len;
-		}
 		spin_unlock(&cache->lock);
 		spin_unlock(&cache->space_info->lock);
 	}
@@ -4468,11 +4450,8 @@  int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
 {
 	struct btrfs_fs_info *fs_info = root->fs_info;
 	struct extent_io_tree *unpin;
-	struct btrfs_block_rsv *block_rsv;
-	struct btrfs_block_rsv *next_rsv;
 	u64 start;
 	u64 end;
-	int idx;
 	int ret;
 
 	if (fs_info->pinned_extents == &fs_info->freed_extents[0])
@@ -4495,30 +4474,6 @@  int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
 		cond_resched();
 	}
 
-	mutex_lock(&fs_info->durable_block_rsv_mutex);
-	list_for_each_entry_safe(block_rsv, next_rsv,
-				 &fs_info->durable_block_rsv_list, list) {
-
-		idx = trans->transid & 0x1;
-		if (block_rsv->freed[idx] > 0) {
-			block_rsv_add_bytes(block_rsv,
-					    block_rsv->freed[idx], 0);
-			block_rsv->freed[idx] = 0;
-		}
-		if (atomic_read(&block_rsv->usage) == 0) {
-			btrfs_block_rsv_release(root, block_rsv, (u64)-1);
-
-			if (block_rsv->freed[0] == 0 &&
-			    block_rsv->freed[1] == 0) {
-				list_del_init(&block_rsv->list);
-				kfree(block_rsv);
-			}
-		} else {
-			btrfs_block_rsv_release(root, block_rsv, 0);
-		}
-	}
-	mutex_unlock(&fs_info->durable_block_rsv_mutex);
-
 	return 0;
 }
 
@@ -4820,36 +4775,18 @@  void btrfs_free_tree_block(struct btrfs_trans_handle *trans,
 		if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) {
 			ret = check_ref_cleanup(trans, root, buf->start);
 			if (!ret)
-				goto pin;
+				goto out;
 		}
 
 		if (btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN)) {
 			pin_down_extent(root, cache, buf->start, buf->len, 1);
-			goto pin;
+			goto out;
 		}
 
 		WARN_ON(test_bit(EXTENT_BUFFER_DIRTY, &buf->bflags));
 
 		btrfs_add_free_space(cache, buf->start, buf->len);
 		btrfs_update_reserved_bytes(cache, buf->len, RESERVE_FREE);
-
-		goto out;
-	}
-pin:
-	if (block_rsv->durable && !cache->ro) {
-		ret = 0;
-		spin_lock(&cache->lock);
-		if (!cache->ro) {
-			cache->reserved_pinned += buf->len;
-			ret = 1;
-		}
-		spin_unlock(&cache->lock);
-
-		if (ret) {
-			spin_lock(&block_rsv->lock);
-			block_rsv->freed[trans->transid & 0x1] += buf->len;
-			spin_unlock(&block_rsv->lock);
-		}
 	}
 out:
 	/*
@@ -6699,12 +6636,9 @@  static int set_block_group_ro(struct btrfs_block_group_cache *cache, int force)
 		    cache->bytes_super - btrfs_block_group_used(&cache->item);
 
 	if (sinfo->bytes_used + sinfo->bytes_reserved + sinfo->bytes_pinned +
-	    sinfo->bytes_may_use + sinfo->bytes_readonly +
-	    cache->reserved_pinned + num_bytes + min_allocable_bytes <=
-	    sinfo->total_bytes) {
+	    sinfo->bytes_may_use + sinfo->bytes_readonly + num_bytes +
+	    min_allocable_bytes <= sinfo->total_bytes) {
 		sinfo->bytes_readonly += num_bytes;
-		sinfo->bytes_may_use += cache->reserved_pinned;
-		cache->reserved_pinned = 0;
 		cache->ro = 1;
 		ret = 0;
 	}
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 91d851c..54b11ad 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)
 	}
 	spin_unlock(&root->orphan_lock);
 
-	if (block_rsv)
-		btrfs_add_durable_block_rsv(root->fs_info, block_rsv);
-
 	/* grab metadata reservation from transaction handle */
 	if (reserve) {
 		ret = btrfs_orphan_reserve_metadata(trans, inode);
@@ -6495,7 +6492,6 @@  static int btrfs_truncate(struct inode *inode)
 	rsv = btrfs_alloc_block_rsv(root);
 	if (!rsv)
 		return -ENOMEM;
-	btrfs_add_durable_block_rsv(root->fs_info, rsv);
 
 	trans = btrfs_start_transaction(root, 4);
 	if (IS_ERR(trans)) {
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
index 59bb176..545b043 100644
--- a/fs/btrfs/relocation.c
+++ b/fs/btrfs/relocation.c
@@ -3651,7 +3651,6 @@  int prepare_to_relocate(struct reloc_control *rc)
 		return ret;
 
 	rc->block_rsv->refill_used = 1;
-	btrfs_add_durable_block_rsv(rc->extent_root->fs_info, rc->block_rsv);
 
 	memset(&rc->cluster, 0, sizeof(rc->cluster));
 	rc->search_start = rc->block_group->key.objectid;