Re: [PATCH] Btrfs: kill the durable block rsv stuff

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Aug 8, 2011 at 1:21 PM, Josef Bacik <josef@xxxxxxxxxx> wrote:
> This is confusing code and isn't used by anything anymore, so delete it.
>
> Signed-off-by: Josef Bacik <josef@xxxxxxxxxx>
> ---
>  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@xxxxxxxxxxxxxxx/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@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux