diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2017-02-21 19:31:20 -0900 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-02-21 19:31:43 -0900 |
commit | ce56a4da21156d2f29ec65a6858e65b63a968e7e (patch) | |
tree | a2de76ea7502ea148928d31dd2467c95f681a96b | |
parent | b78812dfb5d8be712e44675b13683c72d4e59a0c (diff) |
bcache: fix a locking bug
-rw-r--r-- | drivers/md/bcache/journal.c | 10 |
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); |