summaryrefslogtreecommitdiffstats
path: root/drivers/md/bcache/btree.h
diff options
context:
space:
mode:
authorKent Overstreet <kmo@daterainc.com>2013-07-25 02:27:07 +0200
committerKent Overstreet <kmo@daterainc.com>2013-11-11 06:56:03 +0100
commite8e1d4682c8cb06dbcb5ef7bb851bf9bcb889c84 (patch)
tree8e2287b8e21ccb51518b7e2e9d54ab9b4714b7bb /drivers/md/bcache/btree.h
parentbcache: Move keylist out of btree_op (diff)
downloadlinux-e8e1d4682c8cb06dbcb5ef7bb851bf9bcb889c84.tar.xz
linux-e8e1d4682c8cb06dbcb5ef7bb851bf9bcb889c84.zip
bcache: Convert try_wait to wait_queue_head_t
We never waited on c->try_wait asynchronously, so just use the standard primitives. Signed-off-by: Kent Overstreet <kmo@daterainc.com>
Diffstat (limited to 'drivers/md/bcache/btree.h')
-rw-r--r--drivers/md/bcache/btree.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/md/bcache/btree.h b/drivers/md/bcache/btree.h
index 17b7a4e39c7e..72794ab8e8e5 100644
--- a/drivers/md/bcache/btree.h
+++ b/drivers/md/bcache/btree.h
@@ -326,7 +326,7 @@ static inline void rw_unlock(bool w, struct btree *b)
({ \
int _r, l = (b)->level - 1; \
bool _w = l <= (op)->lock; \
- struct btree *_child = bch_btree_node_get((b)->c, key, l, op); \
+ struct btree *_child = bch_btree_node_get((b)->c, key, l, _w); \
if (!IS_ERR(_child)) { \
_child->parent = (b); \
_r = bch_btree_ ## fn(_child, op, ##__VA_ARGS__); \
@@ -356,6 +356,11 @@ static inline void rw_unlock(bool w, struct btree *b)
} \
rw_unlock(_w, _b); \
bch_cannibalize_unlock(c, &(op)->cl); \
+ if (_r == -ENOSPC) { \
+ wait_event((c)->try_wait, \
+ !(c)->try_harder); \
+ _r = -EINTR; \
+ } \
} while (_r == -EINTR); \
\
_r; \
@@ -375,8 +380,7 @@ void bch_btree_node_write(struct btree *, struct closure *);
void bch_cannibalize_unlock(struct cache_set *, struct closure *);
void bch_btree_set_root(struct btree *);
struct btree *bch_btree_node_alloc(struct cache_set *, int, struct closure *);
-struct btree *bch_btree_node_get(struct cache_set *, struct bkey *,
- int, struct btree_op *);
+struct btree *bch_btree_node_get(struct cache_set *, struct bkey *, int, bool);
int bch_btree_insert_check_key(struct btree *, struct btree_op *,
struct bkey *);