Btrfs: fix unclosed transaction handler when the async transaction commitment fails
If the async transaction commitment failed, we need close the current transaction handler, or the current transaction will be blocked to commit because of this orphan handler. We fix the problem by doing sync transaction commitment, that is to invoke btrfs_commit_transaction(). Signed-off-by: Miao Xie <miaox@cn.fujitsu.com> Signed-off-by: Josef Bacik <jbacik@fusionio.com>
This commit is contained in:
Родитель
aec8030a87
Коммит
00d71c9c17
|
@ -527,6 +527,8 @@ fail:
|
|||
if (async_transid) {
|
||||
*async_transid = trans->transid;
|
||||
err = btrfs_commit_transaction_async(trans, root, 1);
|
||||
if (err)
|
||||
err = btrfs_commit_transaction(trans, root);
|
||||
} else {
|
||||
err = btrfs_commit_transaction(trans, root);
|
||||
}
|
||||
|
@ -592,6 +594,8 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,
|
|||
*async_transid = trans->transid;
|
||||
ret = btrfs_commit_transaction_async(trans,
|
||||
root->fs_info->extent_root, 1);
|
||||
if (ret)
|
||||
ret = btrfs_commit_transaction(trans, root);
|
||||
} else {
|
||||
ret = btrfs_commit_transaction(trans,
|
||||
root->fs_info->extent_root);
|
||||
|
|
Загрузка…
Ссылка в новой задаче