Lines Matching full:format
54 const struct bkey_format *format) in bch2_bkey_pack_verify() argument
58 BUG_ON(bkeyp_val_u64s(format, packed) != in bch2_bkey_pack_verify()
61 BUG_ON(packed->u64s < bkeyp_key_u64s(format, packed)); in bch2_bkey_pack_verify()
63 tmp = __bch2_bkey_unpack_key(format, packed); in bch2_bkey_pack_verify()
68 prt_printf(&buf, "keys differ: format u64s %u fields %u %u %u %u %u\n", in bch2_bkey_pack_verify()
69 format->key_u64s, in bch2_bkey_pack_verify()
70 format->bits_per_field[0], in bch2_bkey_pack_verify()
71 format->bits_per_field[1], in bch2_bkey_pack_verify()
72 format->bits_per_field[2], in bch2_bkey_pack_verify()
73 format->bits_per_field[3], in bch2_bkey_pack_verify()
74 format->bits_per_field[4]); in bch2_bkey_pack_verify()
101 const struct bkey_format *format) {} in bch2_bkey_pack_verify() argument
105 const struct bkey_format *format; member
112 static struct pack_state pack_state_init(const struct bkey_format *format, in pack_state_init() argument
115 u64 *p = high_word(format, k); in pack_state_init()
118 .format = format, in pack_state_init()
130 EBUG_ON(state->p >= (u64 *) k->_data + state->format->key_u64s); in pack_state_finish()
136 const struct bkey_format *format; member
143 static struct unpack_state unpack_state_init(const struct bkey_format *format, in unpack_state_init() argument
146 const u64 *p = high_word(format, k); in unpack_state_init()
149 .format = format, in unpack_state_init()
159 unsigned bits = state->format->bits_per_field[field]; in get_inc_field()
160 u64 v = 0, offset = le64_to_cpu(state->format->field_offset[field]); in get_inc_field()
182 unsigned bits = state->format->bits_per_field[field]; in __set_inc_field()
204 unsigned bits = state->format->bits_per_field[field]; in set_inc_field()
205 u64 offset = le64_to_cpu(state->format->field_offset[field]); in set_inc_field()
220 * Note: does NOT set out->format (we don't know what it should be here!)
266 struct bkey __bch2_bkey_unpack_key(const struct bkey_format *format, in __bch2_bkey_unpack_key() argument
269 struct unpack_state state = unpack_state_init(format, in); in __bch2_bkey_unpack_key()
272 EBUG_ON(format->nr_fields != BKEY_NR_FIELDS); in __bch2_bkey_unpack_key()
273 EBUG_ON(in->u64s < format->key_u64s); in __bch2_bkey_unpack_key()
274 EBUG_ON(in->format != KEY_FORMAT_LOCAL_BTREE); in __bch2_bkey_unpack_key()
275 EBUG_ON(in->u64s - format->key_u64s + BKEY_U64s > U8_MAX); in __bch2_bkey_unpack_key()
277 out.u64s = BKEY_U64s + in->u64s - format->key_u64s; in __bch2_bkey_unpack_key()
278 out.format = KEY_FORMAT_CURRENT; in __bch2_bkey_unpack_key()
291 struct bpos __bkey_unpack_pos(const struct bkey_format *format, in __bkey_unpack_pos() argument
294 struct unpack_state state = unpack_state_init(format, in); in __bkey_unpack_pos()
297 EBUG_ON(format->nr_fields != BKEY_NR_FIELDS); in __bkey_unpack_pos()
298 EBUG_ON(in->u64s < format->key_u64s); in __bkey_unpack_pos()
299 EBUG_ON(in->format != KEY_FORMAT_LOCAL_BTREE); in __bkey_unpack_pos()
313 * @format: format of packed result
318 const struct bkey_format *format) in bch2_bkey_pack_key() argument
320 struct pack_state state = pack_state_init(format, out); in bch2_bkey_pack_key()
324 EBUG_ON(format->nr_fields != BKEY_NR_FIELDS); in bch2_bkey_pack_key()
325 EBUG_ON(in->format != KEY_FORMAT_CURRENT); in bch2_bkey_pack_key()
333 out->u64s = format->key_u64s + in->u64s - BKEY_U64s; in bch2_bkey_pack_key()
334 out->format = KEY_FORMAT_LOCAL_BTREE; in bch2_bkey_pack_key()
338 bch2_bkey_pack_verify(out, in, format); in bch2_bkey_pack_key()
344 * @b: btree node of @src key (for packed format)
354 bkeyp_val(&b->format, src), in bch2_bkey_unpack()
355 bkeyp_val_u64s(&b->format, src)); in bch2_bkey_unpack()
362 * @format: format of packed result
367 const struct bkey_format *format) in bch2_bkey_pack() argument
371 if (!bch2_bkey_pack_key(&tmp, &src->k, format)) in bch2_bkey_pack()
374 memmove_u64s((u64 *) dst + format->key_u64s, in bch2_bkey_pack()
377 memcpy_u64s_small(dst, &tmp, format->key_u64s); in bch2_bkey_pack()
385 unsigned bits = state->format->bits_per_field[field]; in set_inc_field_lossy()
386 u64 offset = le64_to_cpu(state->format->field_offset[field]); in set_inc_field_lossy()
406 const struct bkey_format *f = &b->format; in bkey_packed_successor()
472 const struct bkey_format *f = &b->format; in bch2_bkey_pack_pos_lossy()
527 out->format = KEY_FORMAT_LOCAL_BTREE; in bch2_bkey_pack_pos_lossy()
570 * We don't want it to be possible for the packed format to represent fields
655 * Verify that the packed format can't represent fields larger than the in bch2_bkey_format_invalid()
656 * unpacked format: in bch2_bkey_format_invalid()
706 const u64 *l = high_word(&b->format, l_k); in bch2_bkey_greatest_differing_bit()
707 const u64 *r = high_word(&b->format, r_k); in bch2_bkey_greatest_differing_bit()
712 EBUG_ON(b->nr_key_bits != bkey_format_key_bits(&b->format)); in bch2_bkey_greatest_differing_bit()
748 const u64 *p = high_word(&b->format, k); in bch2_bkey_ffs()
752 EBUG_ON(b->nr_key_bits != bkey_format_key_bits(&b->format)); in bch2_bkey_ffs()
790 static u8 *compile_bkey_field(const struct bkey_format *format, u8 *out, in compile_bkey_field() argument
795 unsigned bits = format->bits_per_field[field]; in compile_bkey_field()
796 u64 offset = le64_to_cpu(format->field_offset[field]); in compile_bkey_field()
844 bit_offset = format->key_u64s * 64; in compile_bkey_field()
846 bit_offset -= format->bits_per_field[i]; in compile_bkey_field()
974 int bch2_compile_bkey_format(const struct bkey_format *format, void *_out) in bch2_compile_bkey_format() argument
984 /* k->u64s, k->format, k->type */ in bch2_compile_bkey_format()
989 /* add eax, BKEY_U64s - format->key_u64s */ in bch2_compile_bkey_format()
990 I5(0x05, BKEY_U64s - format->key_u64s, KEY_FORMAT_CURRENT, 0, 0); in bch2_compile_bkey_format()
999 out = compile_bkey_field(format, out, id, \ in bch2_compile_bkey_format()
1097 for (i = 0; i < out_s.format->nr_fields; i++) { in bch2_bkey_pack_test()