diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2016-05-30 19:24:20 -0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-01-18 21:39:33 -0900 |
commit | 7728fc43f0622a2df1b3d86b3db858f8cff99c12 (patch) | |
tree | b0424ee947e4cbfae76bfb47bf0e3b53f4f198e4 | |
parent | 6a8dee187bd5319833a1b11571aea52ccbb62dea (diff) |
bcache: Fix another livelock
-rw-r--r-- | drivers/md/bcache/btree_update.c | 5 |
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; |