The mail of PATCH 0 was always rejected, so I try to send it as the
reply of PATCH 1.
====================
Title: [PATCH 0/6] Random fix of the space relocation

This patchset fixes 5 bugs of the space relocation, one fixes the problem
that we forgot to reserve space for writing out i-node cache, one fixes
that the path is not released, this problem may cause the deadlock.
one fixes the no-cow problem, this problem will break the meta-data.
one fixes the deadlock that caused by the race between the relocation
and the snapshot creation, the last one fixes BUG_ON() which is triggered
by the orphan back-ref nodes.

NOTE: This patchset is based on the danger branch.

Miao Xie (6):
  Btrfs: Abstract similar code for btrfs_block_rsv_add{, _noflush}()
  Btrfs: fix no reserved space for writing out inode cache
  Btrfs: fix unreleased path in btrfs_orphan_cleanup()
  Btrfs: fix nocow when deleting the item
  Btrfs: fix deadlock caused by the race between relocation and snapshot 
creation
  Btrfs: fix orphan backref nodes

 fs/btrfs/extent-tree.c |   28 ++++++++++++----------------
 fs/btrfs/inode-map.c   |   28 ++++++++++++++++++++++++----
 fs/btrfs/inode.c       |    3 +++
 fs/btrfs/relocation.c  |    2 ++
 fs/btrfs/transaction.c |    4 ++--
 fs/btrfs/volumes.c     |    5 ++++-
 6 files changed, 47 insertions(+), 23 deletions(-)

On thu, 10 Nov 2011 14:28:23 +0800, Miao Xie wrote:
> btrfs_block_rsv_add{, _noflush}() have similar code, so abstract that code.
> 
> Signed-off-by: Miao Xie <mi...@cn.fujitsu.com>
> ---
>  fs/btrfs/extent-tree.c |   28 ++++++++++++----------------
>  1 files changed, 12 insertions(+), 16 deletions(-)
> 
> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
> index 1311beb..6703a43 100644
> --- a/fs/btrfs/extent-tree.c
> +++ b/fs/btrfs/extent-tree.c
> @@ -3796,16 +3796,16 @@ void btrfs_free_block_rsv(struct btrfs_root *root,
>       kfree(rsv);
>  }
>  
> -int btrfs_block_rsv_add(struct btrfs_root *root,
> -                     struct btrfs_block_rsv *block_rsv,
> -                     u64 num_bytes)
> +static inline int __block_rsv_add(struct btrfs_root *root,
> +                               struct btrfs_block_rsv *block_rsv,
> +                               u64 num_bytes, int flush)
>  {
>       int ret;
>  
>       if (num_bytes == 0)
>               return 0;
>  
> -     ret = reserve_metadata_bytes(root, block_rsv, num_bytes, 1);
> +     ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush);
>       if (!ret) {
>               block_rsv_add_bytes(block_rsv, num_bytes, 1);
>               return 0;
> @@ -3814,22 +3814,18 @@ int btrfs_block_rsv_add(struct btrfs_root *root,
>       return ret;
>  }
>  
> +int btrfs_block_rsv_add(struct btrfs_root *root,
> +                     struct btrfs_block_rsv *block_rsv,
> +                     u64 num_bytes)
> +{
> +     return __block_rsv_add(root, block_rsv, num_bytes, 1);
> +}
> +
>  int btrfs_block_rsv_add_noflush(struct btrfs_root *root,
>                               struct btrfs_block_rsv *block_rsv,
>                               u64 num_bytes)
>  {
> -     int ret;
> -
> -     if (num_bytes == 0)
> -             return 0;
> -
> -     ret = reserve_metadata_bytes(root, block_rsv, num_bytes, 0);
> -     if (!ret) {
> -             block_rsv_add_bytes(block_rsv, num_bytes, 1);
> -             return 0;
> -     }
> -
> -     return ret;
> +     return __block_rsv_add(root, block_rsv, num_bytes, 0);
>  }
>  
>  int btrfs_block_rsv_check(struct btrfs_root *root,

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to