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