Lines Matching refs:keys

223 	if (!wb->inc.keys.nr)
226 bch2_journal_pin_add(j, wb->inc.keys.data[0].journal_seq, &wb->flushing.pin,
229 darray_resize(&wb->flushing.keys, min_t(size_t, 1U << 20, wb->flushing.keys.nr + wb->inc.keys.nr));
230 darray_resize(&wb->sorted, wb->flushing.keys.size);
232 if (!wb->flushing.keys.nr && wb->sorted.size >= wb->inc.keys.nr) {
233 swap(wb->flushing.keys, wb->inc.keys);
237 size_t nr = min(darray_room(wb->flushing.keys),
238 wb->sorted.size - wb->flushing.keys.nr);
239 nr = min(nr, wb->inc.keys.nr);
241 memcpy(&darray_top(wb->flushing.keys),
242 wb->inc.keys.data,
243 sizeof(wb->inc.keys.data[0]) * nr);
245 memmove(wb->inc.keys.data,
246 wb->inc.keys.data + nr,
247 sizeof(wb->inc.keys.data[0]) * (wb->inc.keys.nr - nr));
249 wb->flushing.keys.nr += nr;
250 wb->inc.keys.nr -= nr;
252 if (!wb->inc.keys.nr)
255 bch2_journal_pin_update(j, wb->inc.keys.data[0].journal_seq, &wb->inc.pin,
264 BUG_ON(wb->sorted.size < wb->flushing.keys.nr);
305 for (size_t i = 0; i < wb->flushing.keys.nr; i++) {
307 wb->sorted.data[i].btree = wb->flushing.keys.data[i].btree;
308 memcpy(&wb->sorted.data[i].pos, &wb->flushing.keys.data[i].k.k.p, sizeof(struct bpos));
310 wb->sorted.nr = wb->flushing.keys.nr;
324 * as many keys as possible in the fast path.
329 struct btree_write_buffered_key *k = &wb->flushing.keys.data[i->idx];
337 prefetch(&wb->flushing.keys.data[n->idx]);
349 struct btree_write_buffered_key *n = &wb->flushing.keys.data[i[1].idx];
426 * The fastpath zapped the seq of keys that were successfully flushed so
429 trace_and_count(c, write_buffer_flush_slowpath, trans, slowpath, wb->flushing.keys.nr);
431 sort(wb->flushing.keys.data,
432 wb->flushing.keys.nr,
433 sizeof(wb->flushing.keys.data[0]),
436 darray_for_each(wb->flushing.keys, i) {
466 * If journal replay hasn't finished with accounting keys we
467 * can't flush accounting keys at all - condense them and leave
484 struct btree_write_buffered_key *dst = wb->flushing.keys.data;
486 darray_for_each(wb->flushing.keys, i)
489 wb->flushing.keys.nr = dst - wb->flushing.keys.data;
495 wb->flushing.keys.nr = 0;
499 trace_write_buffer_flush(trans, wb->flushing.keys.nr, overwritten, fast, 0);
563 *did_work |= wb->inc.keys.nr || wb->flushing.keys.nr;
600 * The write buffer requires flushing when going RO: keys in the journal for the
728 ret = darray_make_room_gfp(&dst->wb->keys, 1, GFP_KERNEL);
730 ret = darray_resize(&wb->sorted, wb->flushing.keys.size);
744 dst->room = darray_room(dst->wb->keys);
746 dst->room = min(dst->room, wb->sorted.size - wb->flushing.keys.nr);
750 struct btree_write_buffered_key *wb_k = &darray_top(dst->wb->keys);
754 dst->wb->keys.nr++;
768 * Attempt to skip wb->inc, and add keys directly to
772 if (!wb->inc.keys.nr) {
783 dst->room = darray_room(dst->wb->keys);
785 dst->room = min(dst->room, wb->sorted.size - wb->flushing.keys.nr);
820 if (!dst->wb->keys.nr)
837 if (wb->keys.size >= new_size)
843 int ret = darray_resize(&wb->keys, new_size);
860 BUG_ON((wb->inc.keys.nr || wb->flushing.keys.nr) &&
865 darray_exit(&wb->flushing.keys);
866 darray_exit(&wb->inc.keys);
880 return darray_make_room(&wb->inc.keys, initial_size) ?:
881 darray_make_room(&wb->flushing.keys, initial_size) ?: