Motr  M0
vec.h
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2013-2021 Seagate Technology LLC and/or its Affiliates
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * For any questions about this software or licensing,
18  * please email opensource@seagate.com or cortx-questions@seagate.com.
19  *
20  */
21 
22 
23 #pragma once
24 
25 #ifndef __MOTR_LIB_VEC_H__
26 #define __MOTR_LIB_VEC_H__
27 
28 #include "motr/config.h" /* CONFIG_X86_64 CONFIG_AARCH64 */
29 #include "lib/types.h"
30 #include "lib/buf.h"
31 #include "lib/varr.h"
32 #include "xcode/xcode_attr.h"
33 
34 #ifdef __KERNEL__
35 #include "lib/linux_kernel/vec.h"
36 #endif
37 
49 struct m0_vec {
51  uint32_t v_nr;
54 } M0_XCA_SEQUENCE M0_XCA_DOMAIN(rpc);
55 
57 M0_INTERNAL m0_bcount_t m0_vec_count(const struct m0_vec *vec);
58 
59 M0_INTERNAL bool m0_vec_is_empty(const struct m0_vec *vec);
60 
91 struct m0_vec_cursor {
92  const struct m0_vec *vc_vec;
94  uint32_t vc_seg;
97 };
98 
104 M0_INTERNAL void m0_vec_cursor_init(struct m0_vec_cursor *cur,
105  const struct m0_vec *vec);
106 
116 M0_INTERNAL bool m0_vec_cursor_move(struct m0_vec_cursor *cur,
118 
126 M0_INTERNAL m0_bcount_t m0_vec_cursor_step(const struct m0_vec_cursor *cur);
127 
134 M0_INTERNAL m0_bcount_t m0_vec_cursor_end(const struct m0_vec_cursor *cur);
135 
137 struct m0_indexvec {
139  struct m0_vec iv_vec;
142 };
143 
145 struct m0_bufvec {
147  struct m0_vec ov_vec;
149  void **ov_buf;
150 };
151 
165 #define M0_BUFVEC_INIT_BUF(addr_ptr, count_ptr) (struct m0_bufvec){ \
166  .ov_vec = { \
167  .v_nr = 1, \
168  .v_count = (count_ptr), \
169  }, \
170  .ov_buf = (addr_ptr) \
171 }
172 
186 M0_INTERNAL int m0_bufvec_alloc(struct m0_bufvec *bufvec,
187  uint32_t num_segs, m0_bcount_t seg_size);
188 
192 M0_INTERNAL int m0_bufvec_empty_alloc(struct m0_bufvec *bufvec,
193  uint32_t num_segs);
194 
208 M0_INTERNAL int m0_bufvec_extend(struct m0_bufvec *bufvec,
209  uint32_t num_segs);
210 
225 M0_INTERNAL int m0_bufvec_merge(struct m0_bufvec *dst_bufvec,
226  struct m0_bufvec *src_bufvec);
227 
232 M0_INTERNAL int m0_bufvec_alloc_aligned(struct m0_bufvec *bufvec,
233  uint32_t num_segs,
234  m0_bcount_t seg_size, unsigned shift);
235 
240 M0_INTERNAL int m0_bufvec_alloc_aligned_packed(struct m0_bufvec *bufvec,
241  uint32_t num_segs,
243  unsigned shift);
247 M0_INTERNAL int m0__bufvec_dont_dump(struct m0_bufvec *bufvec);
248 
255 M0_INTERNAL void m0_bufvec_free(struct m0_bufvec *bufvec);
256 
261 M0_INTERNAL void m0_bufvec_free2(struct m0_bufvec *bufvec);
262 
269 M0_INTERNAL void m0_bufvec_free_aligned(struct m0_bufvec *bufvec,
270  unsigned shift);
271 
276 M0_INTERNAL void m0_bufvec_free_aligned_packed(struct m0_bufvec *bufvec,
277  unsigned shift);
283 M0_INTERNAL uint32_t m0_bufvec_pack(struct m0_bufvec *bufvec);
284 
288 M0_INTERNAL int m0_bufvec_splice(const struct m0_bufvec *bvec, m0_bcount_t nr,
289  struct m0_buf *buf);
290 
299 M0_INTERNAL int m0_indexvec_alloc(struct m0_indexvec *ivec, uint32_t len);
300 
309 M0_INTERNAL void m0_indexvec_free(struct m0_indexvec *ivec);
310 
316 M0_INTERNAL uint32_t m0_indexvec_pack(struct m0_indexvec *ivec);
317 
324 };
325 
331 M0_INTERNAL void m0_bufvec_cursor_init(struct m0_bufvec_cursor *cur,
332  const struct m0_bufvec *bvec);
333 
342 M0_INTERNAL bool m0_bufvec_cursor_move(struct m0_bufvec_cursor *cur,
344 
350 M0_INTERNAL bool m0_bufvec_cursor_align(struct m0_bufvec_cursor *cur,
351  uint64_t alignment);
352 
363 M0_INTERNAL m0_bcount_t m0_bufvec_cursor_step(const struct m0_bufvec_cursor
364  *cur);
365 
373 M0_INTERNAL void *m0_bufvec_cursor_addr(struct m0_bufvec_cursor *cur);
374 
385 M0_INTERNAL m0_bcount_t m0_bufvec_cursor_copy(struct m0_bufvec_cursor *dcur,
386  struct m0_bufvec_cursor *scur,
387  m0_bcount_t num_bytes);
395 M0_INTERNAL m0_bcount_t m0_bufvec_cursor_copyto(struct m0_bufvec_cursor *dcur,
396  void *sdata,
397  m0_bcount_t num_bytes);
405  void *ddata,
406  m0_bcount_t num_bytes);
407 
413 M0_INTERNAL int m0_bufvec_cursor_cmp(struct m0_bufvec_cursor *c0,
414  struct m0_bufvec_cursor *c1);
421  struct m0_bufvec_cursor *c1);
422 
429 #define M0_BUFVEC_FOR2(c0, c1, frag) \
430 { \
431  struct m0_bufvec_cursor *__c0 = (c0); \
432  struct m0_bufvec_cursor *__c1 = (c1); \
433  m0_bcount_t frag = 0; \
434  while (!(m0_bufvec_cursor_move(__c0, frag) | \
435  m0_bufvec_cursor_move(__c1, frag))) { \
436  frag = min_check(m0_bufvec_cursor_step(__c0), \
437  m0_bufvec_cursor_step(__c1));
438 
439 #define M0_BUFVEC_ENDFOR2 } }
440 
447 };
448 
454 M0_INTERNAL void m0_ivec_cursor_init(struct m0_ivec_cursor *cur,
455  const struct m0_indexvec *ivec);
456 
464 M0_INTERNAL bool m0_ivec_cursor_move(struct m0_ivec_cursor *cur,
466 
474 M0_INTERNAL bool m0_ivec_cursor_move_to(struct m0_ivec_cursor *cursor,
475  m0_bindex_t dest);
476 
482 M0_INTERNAL m0_bcount_t m0_ivec_cursor_step(const struct m0_ivec_cursor *cur);
483 
488 M0_INTERNAL m0_bindex_t m0_ivec_cursor_index(const struct m0_ivec_cursor *cur);
489 
496 M0_INTERNAL m0_bindex_t
498 
512 struct m0_0vec {
521 };
522 
523 #ifdef CONFIG_X86_64
524 enum {
525  M0_0VEC_SHIFT = 12,
526  M0_0VEC_ALIGN = (1 << M0_0VEC_SHIFT),
527  M0_0VEC_MASK = M0_0VEC_ALIGN - 1,
528  M0_SEG_SHIFT = 12,
529  M0_SEG_SIZE = (1 << M0_SEG_SHIFT),
530 };
531 #elif defined (CONFIG_AARCH64)
532 enum {
533  M0_0VEC_SHIFT = 16,
534  M0_0VEC_ALIGN = (1 << M0_0VEC_SHIFT),
535  M0_0VEC_MASK = M0_0VEC_ALIGN - 1,
536  M0_SEG_SHIFT = 16,
537  M0_SEG_SIZE = (1 << M0_SEG_SHIFT),
538 };
539 #else
540  #error "The platform is not supported"
541 #endif
542 
553 M0_INTERNAL int m0_0vec_init(struct m0_0vec *zvec, uint32_t segs_nr);
554 
560 M0_INTERNAL void m0_0vec_fini(struct m0_0vec *zvec);
561 
573 M0_INTERNAL void m0_0vec_bvec_init(struct m0_0vec *zvec,
574  const struct m0_bufvec *bufvec,
575  const m0_bindex_t * indices);
576 
589 M0_INTERNAL void m0_0vec_bufs_init(struct m0_0vec *zvec, void **bufs,
590  const m0_bindex_t * indices,
591  const m0_bcount_t * counts,
592  uint32_t segs_nr);
593 
604 M0_INTERNAL int m0_0vec_cbuf_add(struct m0_0vec *zvec, const struct m0_buf *buf,
605  const m0_bindex_t * index);
606 
611 M0_INTERNAL int m0_data_to_bufvec_copy(struct m0_bufvec_cursor *cur, void *data,
612  size_t len);
613 
614 M0_INTERNAL int m0_bufvec_to_data_copy(struct m0_bufvec_cursor *cur, void *data,
615  size_t len);
616 
617 M0_INTERNAL m0_bcount_t m0_bufvec_copy(struct m0_bufvec *dst,
618  struct m0_bufvec *src,
619  m0_bcount_t num_bytes);
620 
625 struct m0_ioseg {
626  uint64_t ci_index;
627  uint64_t ci_count;
628 } M0_XCA_RECORD M0_XCA_DOMAIN(rpc);
629 
635  uint32_t ci_nr;
637 } M0_XCA_SEQUENCE M0_XCA_DOMAIN(rpc);
638 
646  uint32_t cis_nr;
648 } M0_XCA_SEQUENCE M0_XCA_DOMAIN(rpc);
649 
650 M0_INTERNAL m0_bcount_t m0_io_count(const struct m0_io_indexvec *io_info);
651 
663 M0_INTERNAL int m0_indexvec_split(struct m0_indexvec *in,
664  m0_bcount_t curr_pos,
665  m0_bcount_t nb_len,
666  uint32_t bshift,
667  struct m0_indexvec *out);
668 
681 M0_INTERNAL int m0_indexvec_wire2mem(struct m0_io_indexvec *wire_ivec,
682  int max_frags_nr,
683  uint32_t bshift,
684  struct m0_indexvec *mem_ivec);
685 
686 M0_INTERNAL int m0_indexvec_mem2wire(struct m0_indexvec *mem_ivec,
687  int max_frags_nr,
688  uint32_t bshift,
689  struct m0_io_indexvec *wire_ivec);
690 
697 M0_INTERNAL int m0_indexvec_universal_set(struct m0_indexvec *iv);
698 
702 M0_INTERNAL bool m0_indexvec_is_universal(const struct m0_indexvec *iv);
703 
704 
709 
712 
714  uint32_t iv_nr;
715 };
716 
720  uint32_t vc_seg;
723 };
724 
731 M0_INTERNAL int m0_indexvec_varr_alloc(struct m0_indexvec_varr *ivec,
732  uint32_t len);
733 
738 M0_INTERNAL void m0_indexvec_varr_free (struct m0_indexvec_varr *ivec);
739 
745 M0_INTERNAL void
747  struct m0_indexvec_varr *ivec);
755 M0_INTERNAL bool
766 M0_INTERNAL bool
768  m0_bindex_t dest);
775 M0_INTERNAL m0_bcount_t
777 
783 M0_INTERNAL m0_bindex_t
785 
792 M0_INTERNAL m0_bindex_t
794  m0_bindex_t dest);
795 
802 M0_INTERNAL int m0_bufvec_to_buf_copy(struct m0_buf *buf,
803  const struct m0_bufvec *bvec);
804 
811 M0_INTERNAL int m0_buf_to_bufvec_copy(struct m0_bufvec *bvec,
812  const struct m0_buf *buf);
813 
816 /* __MOTR_LIB_VEC_H__ */
817 #endif
818 
819 /*
820  * Local variables:
821  * c-indentation-style: "K&R"
822  * c-basic-offset: 8
823  * tab-width: 8
824  * fill-column: 80
825  * scroll-step: 1
826  * End:
827  */
static m0_bcount_t seg_size
Definition: net.c:118
M0_INTERNAL m0_bcount_t m0_bufvec_copy(struct m0_bufvec *dst, struct m0_bufvec *src, m0_bcount_t num_bytes)
Definition: vec.c:983
m0_bcount_t vc_offset
Definition: vec.h:722
M0_INTERNAL int m0_0vec_init(struct m0_0vec *zvec, uint32_t segs_nr)
Definition: vec.c:826
M0_INTERNAL void m0_ivec_cursor_init(struct m0_ivec_cursor *cur, const struct m0_indexvec *ivec)
Definition: vec.c:707
static m0_bindex_t indices[ZEROVEC_UT_SEGS_NR]
Definition: zerovec.c:38
M0_INTERNAL int m0_bufvec_to_buf_copy(struct m0_buf *buf, const struct m0_bufvec *bvec)
Definition: vec.c:1301
uint64_t ci_count
Definition: vec.h:627
static size_t nr
Definition: dump.c:1505
M0_INTERNAL bool m0_ivec_varr_cursor_move_to(struct m0_ivec_varr_cursor *cur, m0_bindex_t dest)
Definition: vec.c:1250
m0_bcount_t z_count
Definition: vec.h:520
M0_INTERNAL int m0_bufvec_alloc_aligned_packed(struct m0_bufvec *bufvec, uint32_t num_segs, m0_bcount_t seg_size, unsigned shift)
Definition: vec.c:366
M0_INTERNAL int m0_indexvec_alloc(struct m0_indexvec *ivec, uint32_t len)
Definition: vec.c:532
M0_INTERNAL void m0_0vec_fini(struct m0_0vec *zvec)
Definition: vec.c:794
static struct m0_bufvec dst
Definition: xform.c:61
M0_INTERNAL m0_bcount_t m0_ivec_cursor_step(const struct m0_ivec_cursor *cur)
Definition: vec.c:726
M0_INTERNAL int m0_buf_to_bufvec_copy(struct m0_bufvec *bvec, const struct m0_buf *buf)
Definition: vec.c:1315
struct m0_vec_cursor bc_vc
Definition: vec.h:323
static struct buffer * cur(struct m0_addb2_mach *mach, m0_bcount_t space)
Definition: addb2.c:791
m0_bindex_t * z_index
Definition: vec.h:516
M0_INTERNAL m0_bindex_t m0_ivec_cursor_conti(const struct m0_ivec_cursor *cur, m0_bindex_t dest)
Definition: vec.c:765
struct m0_io_indexvec * cis_ivecs
Definition: vec.h:647
struct m0_vec_cursor ic_cur
Definition: vec.h:446
M0_INTERNAL int m0_bufvec_splice(const struct m0_bufvec *bvec, m0_bcount_t nr, struct m0_buf *buf)
Definition: vec.c:491
uint32_t cis_nr
Definition: vec.h:646
M0_INTERNAL uint32_t m0_bufvec_pack(struct m0_bufvec *bv)
Definition: vec.c:480
M0_INTERNAL void m0_0vec_bvec_init(struct m0_0vec *zvec, const struct m0_bufvec *src, const m0_bindex_t *index)
Definition: vec.c:853
M0_INTERNAL int m0_bufvec_merge(struct m0_bufvec *dst_bufvec, struct m0_bufvec *src_bufvec)
Definition: vec.c:280
struct m0_vec ov_vec
Definition: vec.h:147
struct m0_bufvec data
Definition: di.c:40
M0_INTERNAL m0_bindex_t m0_ivec_varr_cursor_conti(const struct m0_ivec_varr_cursor *cur, m0_bindex_t dest)
Definition: vec.c:1271
M0_INTERNAL m0_bcount_t m0_ivec_varr_cursor_step(const struct m0_ivec_varr_cursor *cur)
Definition: vec.c:1224
Definition: vec.h:49
M0_INTERNAL m0_bcount_t m0_vec_cursor_end(const struct m0_vec_cursor *cur)
Definition: vec.c:132
M0_INTERNAL void m0_indexvec_free(struct m0_indexvec *ivec)
Definition: vec.c:553
uint64_t m0_bindex_t
Definition: types.h:80
M0_INTERNAL void * m0_bufvec_cursor_addr(struct m0_bufvec_cursor *cur)
Definition: vec.c:597
uint64_t m0_bcount_t
Definition: types.h:77
uint32_t vc_seg
Definition: vec.h:720
uint32_t ci_nr
Definition: vec.h:635
M0_INTERNAL int m0_data_to_bufvec_copy(struct m0_bufvec_cursor *cur, void *data, size_t len)
Definition: vec.c:946
void ** ov_buf
Definition: vec.h:149
M0_INTERNAL bool m0_ivec_cursor_move_to(struct m0_ivec_cursor *cur, m0_bindex_t dest)
Definition: vec.c:745
M0_INTERNAL int m0_bufvec_extend(struct m0_bufvec *bufvec, uint32_t num_segs)
Definition: vec.c:228
Definition: sock.c:887
static m0_bcount_t count
Definition: xcode.c:167
M0_INTERNAL int m0_bufvec_cursor_cmp(struct m0_bufvec_cursor *c0, struct m0_bufvec_cursor *c1)
Definition: vec.c:639
int m0_bufvec_alloc_aligned(struct m0_bufvec *bufvec, uint32_t num_segs, m0_bcount_t seg_size, unsigned shift)
Definition: vec.c:355
M0_INTERNAL int m0_bufvec_alloc(struct m0_bufvec *bufvec, uint32_t num_segs, m0_bcount_t seg_size)
Definition: vec.c:220
struct m0_vec iv_vec
Definition: vec.h:139
uint64_t ci_index
Definition: vec.h:626
Definition: buf.h:37
M0_INTERNAL void m0_bufvec_free(struct m0_bufvec *bufvec)
Definition: vec.c:395
m0_bindex_t * iv_index
Definition: vec.h:141
Definition: vec.h:625
M0_INTERNAL bool m0_bufvec_cursor_move(struct m0_bufvec_cursor *cur, m0_bcount_t count)
Definition: vec.c:574
M0_INTERNAL int m0_bufvec_to_data_copy(struct m0_bufvec_cursor *cur, void *data, size_t len)
Definition: vec.c:964
M0_INTERNAL int m0_indexvec_varr_alloc(struct m0_indexvec_varr *ivec, uint32_t len)
Definition: vec.c:1136
M0_INTERNAL m0_bcount_t m0_bufvec_cursor_copyfrom(struct m0_bufvec_cursor *scur, void *ddata, m0_bcount_t num_bytes)
Definition: vec.c:692
M0_INTERNAL bool m0_vec_is_empty(const struct m0_vec *vec)
Definition: vec.c:58
M0_INTERNAL m0_bindex_t m0_ivec_varr_cursor_index(const struct m0_ivec_varr_cursor *cur)
Definition: vec.c:1237
M0_INTERNAL m0_bcount_t m0_bufvec_cursor_copy(struct m0_bufvec_cursor *dcur, struct m0_bufvec_cursor *scur, m0_bcount_t num_bytes)
Definition: vec.c:620
M0_INTERNAL void m0_vec_cursor_init(struct m0_vec_cursor *cur, const struct m0_vec *vec)
Definition: vec.c:92
M0_INTERNAL m0_bcount_t m0_bufvec_cursor_step(const struct m0_bufvec_cursor *cur)
Definition: vec.c:581
static void * vec
Definition: xcode.c:168
static struct m0_bufvec bvec
Definition: xcode.c:169
M0_INTERNAL int m0_indexvec_wire2mem(struct m0_io_indexvec *wire_ivec, int max_frags_nr, uint32_t bshift, struct m0_indexvec *mem_ivec)
Definition: vec.c:1058
M0_INTERNAL void m0_bufvec_cursor_init(struct m0_bufvec_cursor *cur, const struct m0_bufvec *bvec)
Definition: vec.c:563
Definition: vec.h:512
struct m0_varr iv_index
Definition: vec.h:711
m0_bcount_t counts[SEGS_NR]
Definition: di.c:44
M0_INTERNAL int m0_0vec_cbuf_add(struct m0_0vec *zvec, const struct m0_buf *buf, const m0_bindex_t *index)
Definition: vec.c:903
struct m0_varr iv_count
Definition: vec.h:708
uint32_t v_nr
Definition: vec.h:51
m0_bcount_t * v_count
Definition: vec.h:53
M0_INTERNAL bool m0_ivec_cursor_move(struct m0_ivec_cursor *cur, m0_bcount_t count)
Definition: vec.c:718
M0_INTERNAL void m0_indexvec_varr_free(struct m0_indexvec_varr *ivec)
Definition: vec.c:1160
uint32_t vc_seg
Definition: vec.h:94
M0_INTERNAL void m0_bufvec_free_aligned(struct m0_bufvec *bufvec, unsigned shift)
Definition: vec.c:436
M0_INTERNAL m0_bcount_t m0_vec_count(const struct m0_vec *vec)
Definition: vec.c:53
struct m0_bufvec z_bvec
Definition: vec.h:514
m0_bcount_t vc_offset
Definition: vec.h:96
M0_INTERNAL uint32_t m0_indexvec_pack(struct m0_indexvec *iv)
Definition: vec.c:521
M0_INTERNAL void m0_ivec_varr_cursor_init(struct m0_ivec_varr_cursor *cur, struct m0_indexvec_varr *ivec)
Definition: vec.c:1183
M0_INTERNAL int m0_indexvec_split(struct m0_indexvec *in, m0_bcount_t curr_pos, m0_bcount_t nb_len, uint32_t bshift, struct m0_indexvec *out)
Definition: vec.c:1039
M0_INTERNAL m0_bcount_t m0_vec_cursor_step(const struct m0_vec_cursor *cur)
Definition: vec.c:125
M0_INTERNAL m0_bcount_t m0_bufvec_cursor_prefix(struct m0_bufvec_cursor *c0, struct m0_bufvec_cursor *c1)
Definition: vec.c:654
M0_INTERNAL int m0_indexvec_mem2wire(struct m0_indexvec *mem_ivec, int max_frags_nr, uint32_t bshift, struct m0_io_indexvec *wire_ivec)
Definition: vec.c:1087
uint32_t iv_nr
Definition: vec.h:714
M0_INTERNAL bool m0_bufvec_cursor_align(struct m0_bufvec_cursor *cur, uint64_t alignment)
Definition: vec.c:604
M0_INTERNAL int m0__bufvec_dont_dump(struct m0_bufvec *bufvec)
Definition: vec.c:331
M0_INTERNAL int m0_indexvec_universal_set(struct m0_indexvec *iv)
Definition: vec.c:1116
M0_INTERNAL bool m0_vec_cursor_move(struct m0_vec_cursor *cur, m0_bcount_t count)
Definition: vec.c:102
M0_INTERNAL m0_bcount_t m0_io_count(const struct m0_io_indexvec *io_info)
Definition: vec.c:999
M0_INTERNAL m0_bcount_t m0_bufvec_cursor_copyto(struct m0_bufvec_cursor *dcur, void *sdata, m0_bcount_t num_bytes)
Definition: vec.c:677
M0_INTERNAL m0_bindex_t m0_ivec_cursor_index(const struct m0_ivec_cursor *cur)
Definition: vec.c:733
m0_bindex_t z_last_buf_idx
Definition: vec.h:518
M0_INTERNAL bool m0_indexvec_is_universal(const struct m0_indexvec *iv)
Definition: vec.c:1129
M0_INTERNAL void m0_bufvec_free_aligned_packed(struct m0_bufvec *bufvec, unsigned shift)
Definition: vec.c:443
#define out(...)
Definition: gen.c:41
M0_INTERNAL void m0_0vec_bufs_init(struct m0_0vec *zvec, void **bufs, const m0_bindex_t *index, const m0_bcount_t *counts, uint32_t segs_nr)
Definition: vec.c:876
struct m0_vec_cursor M0_XCA_DOMAIN
const struct m0_vec * vc_vec
Definition: vec.h:92
Definition: varr.h:121
struct m0_ioseg * ci_iosegs
Definition: vec.h:636
struct m0_pdclust_src_addr src
Definition: fd.c:108
M0_INTERNAL void m0_bufvec_free2(struct m0_bufvec *bufvec)
Definition: vec.c:401
M0_INTERNAL bool m0_ivec_varr_cursor_move(struct m0_ivec_varr_cursor *cur, m0_bcount_t count)
Definition: vec.c:1198
Definition: vec.h:145
M0_INTERNAL int m0_bufvec_empty_alloc(struct m0_bufvec *bufvec, uint32_t num_segs)
Definition: vec.c:213
struct m0_indexvec_varr * vc_ivv
Definition: vec.h:718