summaryrefslogtreecommitdiff
path: root/fs/btrfs/super.c
diff options
context:
space:
mode:
authorMiao Xie <miaox@cn.fujitsu.com>2013-02-20 09:16:24 +0000
committerJosef Bacik <jbacik@fusionio.com>2013-02-20 13:00:03 -0500
commit178260b2c14969f29ba39a78df74ed485abc6203 (patch)
tree56bf3f573112f898f3439d6e0a11d76fbb925bb0 /fs/btrfs/super.c
parent4b82490649f5c8ecbf888752c325ea68831c497e (diff)
downloadlinux-rt-178260b2c14969f29ba39a78df74ed485abc6203.tar.gz
Btrfs: fix the deadlock between the transaction start/attach and commit
Now btrfs_commit_transaction() does this ret = btrfs_run_ordered_operations(root, 0) which async flushes all inodes on the ordered operations list, it introduced a deadlock that transaction-start task, transaction-commit task and the flush workers waited for each other. (See the following URL to get the detail http://marc.info/?l=linux-btrfs&m=136070705732646&w=2) As we know, if ->in_commit is set, it means someone is committing the current transaction, we should not try to join it if we are not JOIN or JOIN_NOLOCK, wait is the best choice for it. In this way, we can avoid the above problem. In this way, there is another benefit: there is no new transaction handle to block the transaction which is on the way of commit, once we set ->in_commit. Signed-off-by: Miao Xie <miaox@cn.fujitsu.com> Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'fs/btrfs/super.c')
0 files changed, 0 insertions, 0 deletions