From 4ac8c24269efc381d49e63225cbd4a5ac851e1b7 Mon Sep 17 00:00:00 2001 From: Miao Xie Date: Mon, 26 Nov 2012 08:42:07 +0000 Subject: [PATCH] --- yaml --- r: 346705 b: refs/heads/master c: 8cd2807f79b73ef2d8c1cb6b3732dc5758ac7212 h: refs/heads/master i: 346703: a8bdc95d819d7f1c5d543e4188c515ee1327cde2 v: v3 --- [refs] | 2 +- trunk/fs/btrfs/transaction.c | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 086016acd15e..b85f64ae9fb7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ff7c1d33551862c86f7737fe88edc3e499d291e6 +refs/heads/master: 8cd2807f79b73ef2d8c1cb6b3732dc5758ac7212 diff --git a/trunk/fs/btrfs/transaction.c b/trunk/fs/btrfs/transaction.c index 8db401fa2f8f..e6509b92433b 100644 --- a/trunk/fs/btrfs/transaction.c +++ b/trunk/fs/btrfs/transaction.c @@ -456,28 +456,31 @@ static noinline void wait_for_commit(struct btrfs_root *root, int btrfs_wait_for_commit(struct btrfs_root *root, u64 transid) { struct btrfs_transaction *cur_trans = NULL, *t; - int ret; + int ret = 0; - ret = 0; if (transid) { if (transid <= root->fs_info->last_trans_committed) goto out; + ret = -EINVAL; /* find specified transaction */ spin_lock(&root->fs_info->trans_lock); list_for_each_entry(t, &root->fs_info->trans_list, list) { if (t->transid == transid) { cur_trans = t; atomic_inc(&cur_trans->use_count); + ret = 0; break; } - if (t->transid > transid) + if (t->transid > transid) { + ret = 0; break; + } } spin_unlock(&root->fs_info->trans_lock); - ret = -EINVAL; + /* The specified transaction doesn't exist */ if (!cur_trans) - goto out; /* bad transid */ + goto out; } else { /* find newest transaction that is committing | committed */ spin_lock(&root->fs_info->trans_lock); @@ -497,9 +500,7 @@ int btrfs_wait_for_commit(struct btrfs_root *root, u64 transid) } wait_for_commit(root, cur_trans); - put_transaction(cur_trans); - ret = 0; out: return ret; }