summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2017-02-21 19:31:20 -0900
committerKent Overstreet <kent.overstreet@gmail.com>2017-02-21 19:31:43 -0900
commitce56a4da21156d2f29ec65a6858e65b63a968e7e (patch)
treea2de76ea7502ea148928d31dd2467c95f681a96b
parentb78812dfb5d8be712e44675b13683c72d4e59a0c (diff)
bcache: fix a locking bug
-rw-r--r--drivers/md/bcache/journal.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c
index 9e09b86df1df..91bc4ac557e6 100644
--- a/drivers/md/bcache/journal.c
+++ b/drivers/md/bcache/journal.c
@@ -199,8 +199,6 @@ redo_peek:
closure_sync(&cl);
- mutex_lock(&c->btree_interior_update_lock);
-
for (i = 0;; i++) {
struct btree_interior_update *as;
struct pending_btree_node_free *d;
@@ -212,6 +210,8 @@ redo_peek:
}
n = bl->entries[i];
mutex_unlock(&j->blacklist_lock);
+redo_wait:
+ mutex_lock(&c->btree_interior_update_lock);
/*
* Is the node on the list of pending interior node updates -
@@ -225,11 +225,11 @@ redo_peek:
closure_wait(&as->wait, &cl);
mutex_unlock(&c->btree_interior_update_lock);
closure_sync(&cl);
- break;
+ goto redo_wait;
}
- }
- mutex_unlock(&c->btree_interior_update_lock);
+ mutex_unlock(&c->btree_interior_update_lock);
+ }
mutex_lock(&j->blacklist_lock);