Lines Matching refs:f

21 	struct find_btree_nodes	*f;  member
53 static void found_btree_node_to_key(struct bkey_i *k, const struct found_btree_node *f) in found_btree_node_to_key() argument
57 set_bkey_val_u64s(&bp->k, sizeof(struct bch_btree_ptr_v2) / sizeof(u64) + f->nr_ptrs); in found_btree_node_to_key()
58 bp->k.p = f->max_key; in found_btree_node_to_key()
59 bp->v.seq = cpu_to_le64(f->cookie); in found_btree_node_to_key()
62 bp->v.sectors_written = cpu_to_le16(f->sectors_written); in found_btree_node_to_key()
63 bp->v.min_key = f->min_key; in found_btree_node_to_key()
64 SET_BTREE_PTR_RANGE_UPDATED(&bp->v, f->range_updated); in found_btree_node_to_key()
65 memcpy(bp->v.start, f->ptrs, sizeof(struct bch_extent_ptr) * f->nr_ptrs); in found_btree_node_to_key()
128 static void try_read_btree_node(struct find_btree_nodes *f, struct bch_dev *ca, in try_read_btree_node() argument
131 struct bch_fs *c = container_of(f, struct bch_fs, found_btree_nodes); in try_read_btree_node()
209 mutex_lock(&f->lock); in try_read_btree_node()
212 f->ret = -EINVAL; in try_read_btree_node()
216 if (darray_push(&f->nodes, n)) in try_read_btree_node()
217 f->ret = -ENOMEM; in try_read_btree_node()
219 mutex_unlock(&f->lock); in try_read_btree_node()
226 struct bch_fs *c = container_of(w->f, struct bch_fs, found_btree_nodes); in read_btree_nodes_worker()
235 w->f->ret = -ENOMEM; in read_btree_nodes_worker()
242 w->f->ret = -ENOMEM; in read_btree_nodes_worker()
265 try_read_btree_node(w->f, ca, b, bio, sector); in read_btree_nodes_worker()
278 static int read_btree_nodes(struct find_btree_nodes *f) in read_btree_nodes() argument
280 struct bch_fs *c = container_of(f, struct bch_fs, found_btree_nodes); in read_btree_nodes()
298 w->f = f; in read_btree_nodes()
317 return f->ret ?: ret; in read_btree_nodes()
373 struct find_btree_nodes *f = &c->found_btree_nodes; in bch2_scan_for_btree_nodes() local
379 if (f->nodes.nr) in bch2_scan_for_btree_nodes()
382 mutex_init(&f->lock); in bch2_scan_for_btree_nodes()
384 ret = read_btree_nodes(f); in bch2_scan_for_btree_nodes()
388 if (!f->nodes.nr) { in bch2_scan_for_btree_nodes()
397 found_btree_nodes_to_text(&buf, c, f->nodes); in bch2_scan_for_btree_nodes()
401 …sort_nonatomic(f->nodes.data, f->nodes.nr, sizeof(f->nodes.data[0]), found_btree_node_cmp_cookie, … in bch2_scan_for_btree_nodes()
404 darray_for_each(f->nodes, i) { in bch2_scan_for_btree_nodes()
405 struct found_btree_node *prev = dst ? f->nodes.data + dst - 1 : NULL; in bch2_scan_for_btree_nodes()
416 f->nodes.data[dst++] = *i; in bch2_scan_for_btree_nodes()
419 f->nodes.nr = dst; in bch2_scan_for_btree_nodes()
421 …sort_nonatomic(f->nodes.data, f->nodes.nr, sizeof(f->nodes.data[0]), found_btree_node_cmp_pos, NUL… in bch2_scan_for_btree_nodes()
426 found_btree_nodes_to_text(&buf, c, f->nodes); in bch2_scan_for_btree_nodes()
430 swap(nodes_heap, f->nodes); in bch2_scan_for_btree_nodes()
444 ret = darray_push(&f->nodes, *min_heap_peek(&nodes_heap)); in bch2_scan_for_btree_nodes()
452 ret = handle_overwrites(c, &darray_last(f->nodes), &nodes_heap); in bch2_scan_for_btree_nodes()
459 ret = darray_push(&f->nodes, *min_heap_peek(&nodes_heap)); in bch2_scan_for_btree_nodes()
466 for (struct found_btree_node *n = f->nodes.data; n < &darray_last(f->nodes); n++) in bch2_scan_for_btree_nodes()
472 found_btree_nodes_to_text(&buf, c, f->nodes); in bch2_scan_for_btree_nodes()
475 bch_info(c, "btree node scan found %zu nodes after overwrites", f->nodes.nr); in bch2_scan_for_btree_nodes()
478 …eytzinger0_sort(f->nodes.data, f->nodes.nr, sizeof(f->nodes.data[0]), found_btree_node_cmp_pos, NU… in bch2_scan_for_btree_nodes()
507 struct find_btree_nodes *f = &c->found_btree_nodes; in bch2_btree_node_is_stale() local
516 for_each_found_btree_node_in_range(f, search, idx) in bch2_btree_node_is_stale()
517 if (f->nodes.data[idx].seq > BTREE_NODE_SEQ(b->data)) in bch2_btree_node_is_stale()
546 struct find_btree_nodes *f = &c->found_btree_nodes; in bch2_get_scanned_nodes() local
573 for_each_found_btree_node_in_range(f, search, idx) { in bch2_get_scanned_nodes()
574 struct found_btree_node n = f->nodes.data[idx]; in bch2_get_scanned_nodes()
608 void bch2_find_btree_nodes_exit(struct find_btree_nodes *f) in bch2_find_btree_nodes_exit() argument
610 darray_exit(&f->nodes); in bch2_find_btree_nodes_exit()