提交 72d63ed6 编写于 作者: L Li Zefan 提交者: Chris Mason

Btrfs: use wait_event()

Use wait_event() when possible to avoid code duplication.
Signed-off-by: NLi Zefan <lizf@cn.fujitsu.com>
Signed-off-by: NChris Mason <chris.mason@oracle.com>
上级 e55179b3
...@@ -216,17 +216,11 @@ static void wait_current_trans(struct btrfs_root *root) ...@@ -216,17 +216,11 @@ static void wait_current_trans(struct btrfs_root *root)
spin_lock(&root->fs_info->trans_lock); spin_lock(&root->fs_info->trans_lock);
cur_trans = root->fs_info->running_transaction; cur_trans = root->fs_info->running_transaction;
if (cur_trans && cur_trans->blocked) { if (cur_trans && cur_trans->blocked) {
DEFINE_WAIT(wait);
atomic_inc(&cur_trans->use_count); atomic_inc(&cur_trans->use_count);
spin_unlock(&root->fs_info->trans_lock); spin_unlock(&root->fs_info->trans_lock);
while (1) {
prepare_to_wait(&root->fs_info->transaction_wait, &wait, wait_event(root->fs_info->transaction_wait,
TASK_UNINTERRUPTIBLE); !cur_trans->blocked);
if (!cur_trans->blocked)
break;
schedule();
}
finish_wait(&root->fs_info->transaction_wait, &wait);
put_transaction(cur_trans); put_transaction(cur_trans);
} else { } else {
spin_unlock(&root->fs_info->trans_lock); spin_unlock(&root->fs_info->trans_lock);
...@@ -360,15 +354,7 @@ struct btrfs_trans_handle *btrfs_start_ioctl_transaction(struct btrfs_root *root ...@@ -360,15 +354,7 @@ struct btrfs_trans_handle *btrfs_start_ioctl_transaction(struct btrfs_root *root
static noinline int wait_for_commit(struct btrfs_root *root, static noinline int wait_for_commit(struct btrfs_root *root,
struct btrfs_transaction *commit) struct btrfs_transaction *commit)
{ {
DEFINE_WAIT(wait); wait_event(commit->commit_wait, commit->commit_done);
while (!commit->commit_done) {
prepare_to_wait(&commit->commit_wait, &wait,
TASK_UNINTERRUPTIBLE);
if (commit->commit_done)
break;
schedule();
}
finish_wait(&commit->commit_wait, &wait);
return 0; return 0;
} }
...@@ -1085,22 +1071,7 @@ int btrfs_transaction_blocked(struct btrfs_fs_info *info) ...@@ -1085,22 +1071,7 @@ int btrfs_transaction_blocked(struct btrfs_fs_info *info)
static void wait_current_trans_commit_start(struct btrfs_root *root, static void wait_current_trans_commit_start(struct btrfs_root *root,
struct btrfs_transaction *trans) struct btrfs_transaction *trans)
{ {
DEFINE_WAIT(wait); wait_event(root->fs_info->transaction_blocked_wait, trans->in_commit);
if (trans->in_commit)
return;
while (1) {
prepare_to_wait(&root->fs_info->transaction_blocked_wait, &wait,
TASK_UNINTERRUPTIBLE);
if (trans->in_commit) {
finish_wait(&root->fs_info->transaction_blocked_wait,
&wait);
break;
}
schedule();
finish_wait(&root->fs_info->transaction_blocked_wait, &wait);
}
} }
/* /*
...@@ -1110,24 +1081,8 @@ static void wait_current_trans_commit_start(struct btrfs_root *root, ...@@ -1110,24 +1081,8 @@ static void wait_current_trans_commit_start(struct btrfs_root *root,
static void wait_current_trans_commit_start_and_unblock(struct btrfs_root *root, static void wait_current_trans_commit_start_and_unblock(struct btrfs_root *root,
struct btrfs_transaction *trans) struct btrfs_transaction *trans)
{ {
DEFINE_WAIT(wait); wait_event(root->fs_info->transaction_wait,
trans->commit_done || (trans->in_commit && !trans->blocked));
if (trans->commit_done || (trans->in_commit && !trans->blocked))
return;
while (1) {
prepare_to_wait(&root->fs_info->transaction_wait, &wait,
TASK_UNINTERRUPTIBLE);
if (trans->commit_done ||
(trans->in_commit && !trans->blocked)) {
finish_wait(&root->fs_info->transaction_wait,
&wait);
break;
}
schedule();
finish_wait(&root->fs_info->transaction_wait,
&wait);
}
} }
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册