Btrfs: fix joining the same transaction handler more than 2 times
authorMiao Xie <miaox@cn.fujitsu.com>
Thu, 1 Nov 2012 07:32:18 +0000 (07:32 +0000)
committerJosef Bacik <jbacik@fusionio.com>
Wed, 12 Dec 2012 22:15:20 +0000 (17:15 -0500)
commitb7d5b0a819498a9c04e1d18201a42468f7edd92a
treeac708a897951993954b0e52b33641c4ee19bfa2c
parent4fde183d8c755f8a8bdffcb03a8d947e62ccea6a
Btrfs: fix joining the same transaction handler more than 2 times

If we flush inodes with pending delalloc in a transaction, we may join
the same transaction handler more than 2 times.

The reason is:
  Task use_count of trans handle
  commit_transaction 1
    |-> btrfs_start_delalloc_inodes 1
  |-> run_delalloc_nocow 1
|-> join_transaction 2
|-> cow_file_range 2
|-> join_transaction 3

In fact, cow_file_range needn't join the transaction again because the caller
have joined the transaction, so we fix this problem by this way.

Reported-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
fs/btrfs/inode.c
fs/btrfs/transaction.c