Lines Matching refs:op
116 #define btree(fn, key, b, op, ...) \ argument
119 bool _w = l <= (op)->lock; \
120 struct btree *_child = bch_btree_node_get((b)->c, op, key, l, \
123 _r = bch_btree_ ## fn(_child, op, ##__VA_ARGS__); \
136 #define btree_root(fn, c, op, ...) \ argument
141 bool _w = insert_lock(op, _b); \
144 _w == insert_lock(op, _b)) { \
145 _r = bch_btree_ ## fn(_b, op, ##__VA_ARGS__); \
153 finish_wait(&(c)->btree_cache_wait, &(op)->wait); \
837 static int mca_cannibalize_lock(struct cache_set *c, struct btree_op *op) in mca_cannibalize_lock() argument
843 if (op) in mca_cannibalize_lock()
844 prepare_to_wait(&c->btree_cache_wait, &op->wait, in mca_cannibalize_lock()
852 static struct btree *mca_cannibalize(struct cache_set *c, struct btree_op *op, in mca_cannibalize() argument
859 if (mca_cannibalize_lock(c, op)) in mca_cannibalize()
888 static struct btree *mca_alloc(struct cache_set *c, struct btree_op *op, in mca_alloc() argument
952 b = mca_cannibalize(c, op, k); in mca_alloc()
968 struct btree *bch_btree_node_get(struct cache_set *c, struct btree_op *op, in bch_btree_node_get() argument
984 b = mca_alloc(c, op, k, level); in bch_btree_node_get()
1065 struct btree *__bch_btree_node_alloc(struct cache_set *c, struct btree_op *op, in __bch_btree_node_alloc() argument
1080 b = mca_alloc(c, op, &k.key, level); in __bch_btree_node_alloc()
1108 struct btree_op *op, int level, in bch_btree_node_alloc() argument
1111 return __bch_btree_node_alloc(c, op, level, op != NULL, parent); in bch_btree_node_alloc()
1115 struct btree_op *op) in btree_node_alloc_replacement() argument
1117 struct btree *n = bch_btree_node_alloc(b->c, op, b->level, b->parent); in btree_node_alloc_replacement()
1147 static int btree_check_reserve(struct btree *b, struct btree_op *op) in btree_check_reserve() argument
1157 if (op) in btree_check_reserve()
1158 prepare_to_wait(&c->btree_cache_wait, &op->wait, in btree_check_reserve()
1166 return mca_cannibalize_lock(b->c, op); in btree_check_reserve()
1297 static int btree_gc_coalesce(struct btree *b, struct btree_op *op, in btree_gc_coalesce() argument
1427 bch_btree_insert_node(b, op, &keylist, NULL, NULL); in btree_gc_coalesce()
1464 static int btree_gc_rewrite_node(struct btree *b, struct btree_op *op, in btree_gc_rewrite_node() argument
1490 bch_btree_insert_node(b, op, &keys, NULL, NULL); in btree_gc_rewrite_node()
1512 static int btree_gc_recurse(struct btree *b, struct btree_op *op, in btree_gc_recurse() argument
1530 r->b = bch_btree_node_get(b->c, op, k, b->level - 1, in btree_gc_recurse()
1539 ret = btree_gc_coalesce(b, op, gc, r); in btree_gc_recurse()
1550 ret = btree_gc_rewrite_node(b, op, last->b); in btree_gc_recurse()
1556 ret = btree_gc_recurse(last->b, op, writes, gc); in btree_gc_recurse()
1595 static int bch_btree_gc_root(struct btree *b, struct btree_op *op, in bch_btree_gc_root() argument
1620 ret = btree_gc_recurse(b, op, writes, gc); in bch_btree_gc_root()
1730 struct btree_op op; in bch_btree_gc() local
1737 bch_btree_op_init(&op, SHRT_MAX); in bch_btree_gc()
1742 ret = btree_root(gc_root, c, &op, &writes, &stats); in bch_btree_gc()
1809 static int bch_btree_check_recurse(struct btree *b, struct btree_op *op) in bch_btree_check_recurse() argument
1830 ret = btree(check_recurse, p, b, op); in bch_btree_check_recurse()
1841 struct btree_op op; in bch_btree_check() local
1843 bch_btree_op_init(&op, SHRT_MAX); in bch_btree_check()
1845 return btree_root(check_recurse, c, &op); in bch_btree_check()
1918 static bool bch_btree_insert_keys(struct btree *b, struct btree_op *op, in bch_btree_insert_keys() argument
1952 op->insert_collision = true; in bch_btree_insert_keys()
1960 static int btree_split(struct btree *b, struct btree_op *op, in btree_split() argument
1973 if (btree_check_reserve(b, op)) { in btree_split()
1980 n1 = btree_node_alloc_replacement(b, op); in btree_split()
1992 n2 = bch_btree_node_alloc(b->c, op, b->level, b->parent); in btree_split()
1997 n3 = bch_btree_node_alloc(b->c, op, b->level + 1, NULL); in btree_split()
2005 bch_btree_insert_keys(n1, op, insert_keys, replace_key); in btree_split()
2037 bch_btree_insert_keys(n1, op, insert_keys, replace_key); in btree_split()
2048 bch_btree_insert_keys(n3, op, &parent_keys, NULL); in btree_split()
2065 bch_btree_insert_node(b->parent, op, &parent_keys, NULL, NULL); in btree_split()
2094 static int bch_btree_insert_node(struct btree *b, struct btree_op *op, in bch_btree_insert_node() argument
2118 if (bch_btree_insert_keys(b, op, insert_keys, replace_key)) { in bch_btree_insert_node()
2133 op->lock = b->c->root->level + 1; in bch_btree_insert_node()
2135 } else if (op->lock <= b->c->root->level) { in bch_btree_insert_node()
2136 op->lock = b->c->root->level + 1; in bch_btree_insert_node()
2140 int ret = btree_split(b, op, insert_keys, replace_key); in bch_btree_insert_node()
2150 int bch_btree_insert_check_key(struct btree *b, struct btree_op *op, in bch_btree_insert_check_key() argument
2157 bool upgrade = op->lock == -1; in bch_btree_insert_check_key()
2167 op->lock = b->level; in bch_btree_insert_check_key()
2179 ret = bch_btree_insert_node(b, op, &insert, NULL, NULL); in bch_btree_insert_check_key()
2189 struct btree_op op; member
2197 struct btree_insert_op *op = container_of(b_op, in btree_insert_fn() local
2198 struct btree_insert_op, op); in btree_insert_fn()
2200 int ret = bch_btree_insert_node(b, &op->op, op->keys, in btree_insert_fn()
2201 op->journal_ref, op->replace_key); in btree_insert_fn()
2202 if (ret && !bch_keylist_empty(op->keys)) in btree_insert_fn()
2211 struct btree_insert_op op; in bch_btree_insert() local
2217 bch_btree_op_init(&op.op, 0); in bch_btree_insert()
2218 op.keys = keys; in bch_btree_insert()
2219 op.journal_ref = journal_ref; in bch_btree_insert()
2220 op.replace_key = replace_key; in bch_btree_insert()
2223 op.op.lock = 0; in bch_btree_insert()
2224 ret = bch_btree_map_leaf_nodes(&op.op, c, in bch_btree_insert()
2236 } else if (op.op.insert_collision) in bch_btree_insert()
2268 static int bch_btree_map_nodes_recurse(struct btree *b, struct btree_op *op, in bch_btree_map_nodes_recurse() argument
2283 op, from, fn, flags); in bch_btree_map_nodes_recurse()
2292 ret = fn(op, b); in bch_btree_map_nodes_recurse()
2297 int __bch_btree_map_nodes(struct btree_op *op, struct cache_set *c, in __bch_btree_map_nodes() argument
2300 return btree_root(map_nodes_recurse, c, op, from, fn, flags); in __bch_btree_map_nodes()
2303 static int bch_btree_map_keys_recurse(struct btree *b, struct btree_op *op, in bch_btree_map_keys_recurse() argument
2315 ? fn(op, b, k) in bch_btree_map_keys_recurse()
2316 : btree(map_keys_recurse, k, b, op, from, fn, flags); in bch_btree_map_keys_recurse()
2324 ret = fn(op, b, &KEY(KEY_INODE(&b->key), in bch_btree_map_keys_recurse()
2330 int bch_btree_map_keys(struct btree_op *op, struct cache_set *c, in bch_btree_map_keys() argument
2333 return btree_root(map_keys_recurse, c, op, from, fn, flags); in bch_btree_map_keys()
2355 struct btree_op op; member
2362 static int refill_keybuf_fn(struct btree_op *op, struct btree *b, in refill_keybuf_fn() argument
2365 struct refill *refill = container_of(op, struct refill, op); in refill_keybuf_fn()
2414 bch_btree_op_init(&refill.op, -1); in bch_refill_keybuf()
2420 bch_btree_map_keys(&refill.op, c, &buf->last_scanned, in bch_refill_keybuf()