From: Miao Xie Date: Wed, 20 Feb 2013 09:16:24 +0000 (+0000) Subject: Btrfs: fix the deadlock between the transaction start/attach and commit X-Git-Tag: v3.9-rc1~17^2~29^2~4 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=178260b2c14969f29ba39a78df74ed485abc6203;p=pandora-kernel.git 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 Signed-off-by: Josef Bacik --- Reading git-diff-tree failed