summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2016-05-30 19:24:20 -0800
committerKent Overstreet <kent.overstreet@gmail.com>2017-01-18 21:39:33 -0900
commit7728fc43f0622a2df1b3d86b3db858f8cff99c12 (patch)
treeb0424ee947e4cbfae76bfb47bf0e3b53f4f198e4
parent6a8dee187bd5319833a1b11571aea52ccbb62dea (diff)
bcache: Fix another livelock
-rw-r--r--drivers/md/bcache/btree_update.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/md/bcache/btree_update.c b/drivers/md/bcache/btree_update.c
index 17afb0d60a57..4d44ecb3fd87 100644
--- a/drivers/md/bcache/btree_update.c
+++ b/drivers/md/bcache/btree_update.c
@@ -1601,7 +1601,7 @@ int bch_btree_insert_trans(struct btree_insert_trans *trans,
return -EROFS;
trans_for_each_entry(trans, i) {
- i->iter->locks_want = 0;
+ i->iter->locks_want = max_t(int, i->iter->locks_want, 0);
if (unlikely(!bch_btree_iter_upgrade(i->iter))) {
ret = -EINTR;
goto err;
@@ -1675,6 +1675,9 @@ retry:
if (!same_leaf_as_prev(trans, i))
bch_btree_node_write_lazy(i->iter->nodes[0], i->iter);
+ trans_for_each_entry(trans, i)
+ i->iter->locks_want = 0;
+
out:
percpu_ref_put(&c->writes);
return ret;