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