Motr  M0
io.h
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2016-2020 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_IO_H__
26 #define __MOTR_IO_H__
27 
28 #include "ioservice/fid_convert.h"
29 #include "motr/client_internal.h"
30 
31 /*
32  * These three are used as macros since they are used as lvalues which is
33  * not possible by using static inline functions.
34  */
35 #define INDEX(ivec, i) ((ivec)->iv_index[(i)])
36 #define COUNT(ivec, i) ((ivec)->iv_vec.v_count[(i)])
37 #define BUFVI(ovec, i) ((ovec)->ov_buf[(i)])
38 #define BUFVC(ovec, i) ((ovec)->ov_vec.v_count[(i)])
39 
40 #define SEG_NR(vec) ((vec)->iv_vec.v_nr)
41 
43 #define SHIFT2MASK(x) ~((1ULL<<x) -1)
44 
45 /* op_io's state configuration */
46 extern struct m0_sm_conf io_sm_conf;
47 
48 extern const struct m0_op_io_ops ioo_ops;
49 extern const struct m0_op_io_ops ioo_oostore_ops;
50 
52 extern const struct m0_uint128 m0_rm_group;
53 
54 /* BOB types */
55 extern const struct m0_bob_type ioo_bobtype;
56 M0_BOB_DECLARE(M0_INTERNAL, m0_op_io);
57 
58 extern struct m0_bob_type iofop_bobtype;
59 M0_BOB_DECLARE(M0_INTERNAL, ioreq_fop);
60 
61 extern const struct m0_bob_type tioreq_bobtype;
62 M0_BOB_DECLARE(M0_INTERNAL, target_ioreq);
63 
64 extern const struct m0_bob_type nwxfer_bobtype;
65 M0_BOB_DECLARE(M0_INTERNAL, nw_xfer_request);
66 
67 extern const struct m0_bob_type pgiomap_bobtype;
68 M0_BOB_DECLARE(M0_INTERNAL, pargrp_iomap);
69 
70 extern const struct m0_bob_type dtbuf_bobtype;
71 M0_BOB_DECLARE(M0_INTERNAL, data_buf);
72 
73 /* iofops list */
74 M0_TL_DESCR_DECLARE(iofops, M0_EXTERN);
75 M0_TL_DECLARE(iofops, M0_INTERNAL, struct ioreq_fop);
76 
77 M0_TL_DECLARE(rpcbulk, M0_INTERNAL, struct m0_rpc_bulk_buf);
78 M0_TL_DESCR_DECLARE(rpcbulk, M0_EXTERN);
79 
80 /* tioreq hash table*/
81 M0_TL_DECLARE(tioreqht, M0_EXTERN, struct target_ioreq);
82 /* a workaround to expose hash tl (should fix in hash.h)*/
83 M0_TL_DESCR_DECLARE(tioreqht, M0_EXTERN);
84 M0_HT_DESCR_DECLARE(tioreqht, M0_EXTERN);
85 M0_HT_DECLARE(tioreqht, M0_EXTERN, struct target_ioreq, uint64_t);
86 
94 M0_INTERNAL bool addr_is_network_aligned(void *addr);
95 
102 M0_INTERNAL uint64_t obj_buffer_size(const struct m0_obj *obj);
103 
110 M0_INTERNAL uint64_t m0__page_size(const struct m0_op_io *ioo);
111 
121 M0_INTERNAL uint64_t page_nr(m0_bcount_t size, struct m0_obj *obj);
122 
129 M0_INTERNAL uint32_t layout_n(struct m0_pdclust_layout *play);
130 
138 M0_INTERNAL uint32_t layout_k(struct m0_pdclust_layout *play);
139 
148 M0_INTERNAL uint64_t page_id(m0_bindex_t offset, struct m0_obj *obj);
149 
156 M0_INTERNAL uint64_t layout_unit_size(struct m0_pdclust_layout *play);
157 
168 M0_INTERNAL uint32_t rows_nr(struct m0_pdclust_layout *play,
169  struct m0_obj *obj);
170 
174 M0_INTERNAL uint64_t data_size(struct m0_pdclust_layout *play);
175 
182 M0_INTERNAL struct m0_pdclust_instance *
184 
192 M0_INTERNAL struct m0_pdclust_layout *
193 pdlayout_get(const struct m0_op_io *ioo);
194 
201 M0_INTERNAL struct m0_layout_instance *
202 layout_instance(const struct m0_op_io *ioo);
203 
210 M0_INTERNAL struct m0_parity_math *parity_math(struct m0_op_io *ioo);
211 
220 M0_INTERNAL uint64_t target_offset(uint64_t frame,
221  struct m0_pdclust_layout *play,
222  m0_bindex_t gob_offset);
230 M0_INTERNAL uint32_t di_cksum_offset(struct m0_pdclust_layout *play,
231  m0_bindex_t gob_offset);
239 M0_INTERNAL uint64_t group_id(m0_bindex_t index, m0_bcount_t dtsize);
240 
248 M0_INTERNAL m0_bcount_t seg_endpos(const struct m0_indexvec *ivec, uint32_t i);
249 
257 M0_INTERNAL uint64_t indexvec_page_nr(const struct m0_vec *vec,
258  struct m0_obj *obj);
259 
266 M0_INTERNAL uint64_t iomap_page_nr(const struct pargrp_iomap *map);
267 
275 M0_INTERNAL uint64_t parity_units_page_nr(struct m0_pdclust_layout *play,
276  struct m0_obj *obj);
277 
278 #if !defined(round_down)
279 
287 M0_INTERNAL uint64_t round_down(uint64_t val, uint64_t size);
288 #endif
289 
290 #if !defined(round_up)
291 
299 M0_INTERNAL uint64_t round_up(uint64_t val, uint64_t size);
300 
301 #endif
302 
311 M0_INTERNAL uint32_t io_desc_size(struct m0_net_domain *ndom);
312 
319 M0_INTERNAL uint32_t io_seg_size(void);
320 
333 M0_INTERNAL void page_pos_get(struct pargrp_iomap *map,
335  m0_bindex_t grp_size,
336  uint32_t *row,
337  uint32_t *col);
338 
339 /*
340  * Returns the starting offset of page given its position in data matrix.
341  * Acts as opposite of page_pos_get() API.
342  */
344  uint32_t row,
345  uint32_t col);
346 
354 M0_INTERNAL uint32_t ioreq_sm_state(const struct m0_op_io *ioo);
355 
360 M0_INTERNAL uint64_t tolerance_of_level(struct m0_op_io *ioo,
361  uint64_t lv);
362 
370 M0_INTERNAL struct m0_rm_domain *
372 
380 M0_INTERNAL struct m0_poolmach*
381 ioo_to_poolmach(struct m0_op_io *ioo);
382 
389 M0_INTERNAL bool nw_xfer_request_invariant(const struct nw_xfer_request *xfer);
390 
395 M0_INTERNAL void target_ioreq_fini(struct target_ioreq *ti);
396 
401 M0_INTERNAL void target_ioreq_cancel(struct target_ioreq *ti);
402 
411 M0_INTERNAL struct m0_fid target_fid(struct m0_op_io *ioo,
412  struct m0_pdclust_tgt_addr *tgt);
413 
420 M0_INTERNAL void nw_xfer_request_init(struct nw_xfer_request *xfer);
421 
428 M0_INTERNAL void nw_xfer_request_fini(struct nw_xfer_request *xfer);
429 
436 M0_INTERNAL bool ioreq_fop_invariant(const struct ioreq_fop *fop);
437 
446 M0_INTERNAL int ioreq_fop_async_submit(struct m0_io_fop *iofop,
447  struct m0_rpc_session *session);
448 
457 M0_INTERNAL int ioreq_fop_init(struct ioreq_fop *fop,
458  struct target_ioreq *ti,
459  enum page_attr pattr);
465 M0_INTERNAL void ioreq_fop_fini(struct ioreq_fop *fop);
466 
472 M0_INTERNAL int ioreq_cc_fop_init(struct target_ioreq *ti);
473 
481 M0_INTERNAL int ioreq_fop_dgmode_read(struct ioreq_fop *irfop);
482 
490 M0_INTERNAL void ioreq_sm_state_set_locked(struct m0_op_io *ioo,
491  int state);
492 
500 M0_INTERNAL void ioreq_sm_failed_locked(struct m0_op_io *ioo, int rc);
501 
508 M0_INTERNAL bool data_buf_invariant(const struct data_buf *db);
509 
518 M0_INTERNAL uint64_t pargrp_id_find(m0_bindex_t index,
519  const struct m0_op_io *ioo,
520  const struct ioreq_fop *ir_fop);
521 
528 M0_INTERNAL bool pargrp_iomap_invariant(const struct pargrp_iomap *map);
529 
536 M0_INTERNAL bool pargrp_iomap_invariant_nr(const struct m0_op_io *ioo);
537 
547 M0_INTERNAL int pargrp_iomap_init(struct pargrp_iomap *map,
548  struct m0_op_io *ioo,
549  uint64_t grpid);
557 M0_INTERNAL void pargrp_iomap_fini(struct pargrp_iomap *map,
558  struct m0_obj *obj);
559 
560 M0_INTERNAL struct m0_obj_attr *
561 m0_io_attr(struct m0_op_io *ioo);
562 #endif /* __MOTR_IO_H__ */
563 
564 /*
565  * Local variables:
566  * c-indentation-style: "K&R"
567  * c-basic-offset: 8
568  * tab-width: 8
569  * fill-column: 80
570  * scroll-step: 1
571  * End:
572  */
573 /*
574  * vim: tabstop=8 shiftwidth=8 noexpandtab textwidth=80 nowrap
575  */
M0_INTERNAL uint64_t group_id(m0_bindex_t index, m0_bcount_t dtsize)
Definition: utils.c:139
M0_INTERNAL uint64_t target_offset(uint64_t frame, struct m0_pdclust_layout *play, m0_bindex_t gob_offset)
Definition: utils.c:129
const struct m0_op_io_ops ioo_ops
Definition: io_req.c:1860
Definition: client.h:788
M0_INTERNAL uint64_t round_up(uint64_t val, uint64_t size)
Definition: utils.c:192
M0_INTERNAL struct m0_pdclust_instance * pdlayout_instance(struct m0_layout_instance *li)
Definition: utils.c:103
map
Definition: processor.c:112
Definition: idx_mock.c:52
Definition: storage.c:103
Definition: sm.h:350
M0_INTERNAL m0_bcount_t seg_endpos(const struct m0_indexvec *ivec, uint32_t i)
Definition: utils.c:145
M0_INTERNAL int ioreq_fop_dgmode_read(struct ioreq_fop *irfop)
Definition: io_req_fop.c:745
M0_INTERNAL uint32_t di_cksum_offset(struct m0_pdclust_layout *play, m0_bindex_t gob_offset)
M0_HT_DECLARE(tioreqht, M0_EXTERN, struct target_ioreq, uint64_t)
M0_INTERNAL uint32_t io_desc_size(struct m0_net_domain *ndom)
Definition: utils.c:205
M0_INTERNAL int ioreq_cc_fop_init(struct target_ioreq *ti)
Definition: io_req_fop.c:810
M0_INTERNAL uint64_t iomap_page_nr(const struct pargrp_iomap *map)
Definition: utils.c:161
struct m0_sm_conf io_sm_conf
Definition: io_req.c:141
Definition: vec.h:49
const struct m0_bob_type tioreq_bobtype
Definition: io_nw_xfer.c:63
uint64_t m0_bindex_t
Definition: types.h:80
uint64_t m0_bcount_t
Definition: types.h:77
static struct m0_rpc_session session
Definition: formation2.c:38
const struct m0_bob_type nwxfer_bobtype
Definition: io_nw_xfer.c:56
M0_INTERNAL struct m0_poolmach * ioo_to_poolmach(struct m0_op_io *ioo)
Definition: io.c:75
static struct foo * obj
Definition: tlist.c:302
M0_INTERNAL struct m0_fid target_fid(struct m0_op_io *ioo, struct m0_pdclust_tgt_addr *tgt)
Definition: io_nw_xfer.c:710
const struct m0_bob_type dtbuf_bobtype
Definition: io_pargrp.c:69
struct m0_bob_type iofop_bobtype
Definition: io_req_fop.c:47
M0_INTERNAL uint32_t ioreq_sm_state(const struct m0_op_io *ioo)
Definition: utils.c:268
M0_INTERNAL int ioreq_fop_init(struct ioreq_fop *fop, struct target_ioreq *ti, enum page_attr pattr)
Definition: io_req_fop.c:977
M0_INTERNAL void page_pos_get(struct pargrp_iomap *map, m0_bindex_t index, m0_bindex_t grp_size, uint32_t *row, uint32_t *col)
Definition: utils.c:224
int i
Definition: dir.c:1033
const struct m0_bob_type ioo_bobtype
Definition: io_req.c:153
M0_INTERNAL struct m0_pdclust_layout * pdlayout_get(const struct m0_op_io *ioo)
Definition: utils.c:111
M0_BOB_DECLARE(M0_INTERNAL, m0_op_io)
M0_INTERNAL uint32_t layout_n(struct m0_pdclust_layout *play)
Definition: utils.c:57
M0_INTERNAL void ioreq_sm_state_set_locked(struct m0_op_io *ioo, int state)
Definition: io_req.c:193
M0_INTERNAL uint64_t indexvec_page_nr(const struct m0_vec *vec, struct m0_obj *obj)
Definition: utils.c:152
M0_INTERNAL uint64_t parity_units_page_nr(struct m0_pdclust_layout *play, struct m0_obj *obj)
Definition: utils.c:168
M0_INTERNAL void ioreq_sm_failed_locked(struct m0_op_io *ioo, int rc)
Definition: io_req.c:212
static void * vec
Definition: xcode.c:168
M0_INTERNAL bool pargrp_iomap_invariant_nr(const struct m0_op_io *ioo)
Definition: io_pargrp.c:227
M0_INTERNAL void pargrp_iomap_fini(struct pargrp_iomap *map, struct m0_obj *obj)
Definition: io_pargrp.c:2467
M0_TL_DECLARE(iofops, M0_INTERNAL, struct ioreq_fop)
M0_INTERNAL m0_bindex_t data_page_offset_get(struct pargrp_iomap *map, uint32_t row, uint32_t col)
Definition: utils.c:246
M0_INTERNAL int ioreq_fop_async_submit(struct m0_io_fop *iofop, struct m0_rpc_session *session)
Definition: io_req_fop.c:672
M0_INTERNAL void nw_xfer_request_init(struct nw_xfer_request *xfer)
Definition: io_nw_xfer.c:2130
M0_INTERNAL struct m0_layout_instance * layout_instance(const struct m0_op_io *ioo)
Definition: utils.c:117
M0_INTERNAL bool ioreq_fop_invariant(const struct ioreq_fop *fop)
Definition: io_req_fop.c:62
M0_INTERNAL struct m0_obj_attr * m0_io_attr(struct m0_op_io *ioo)
Definition: utils.c:302
M0_INTERNAL uint32_t rows_nr(struct m0_pdclust_layout *play, struct m0_obj *obj)
Definition: utils.c:87
Definition: xcode.h:73
M0_INTERNAL int pargrp_iomap_init(struct pargrp_iomap *map, struct m0_op_io *ioo, uint64_t grpid)
Definition: io_pargrp.c:2387
M0_INTERNAL void target_ioreq_cancel(struct target_ioreq *ti)
Definition: io_nw_xfer.c:423
static m0_bindex_t offset
Definition: dump.c:173
const struct m0_uint128 m0_rm_group
Definition: io.c:53
M0_INTERNAL uint64_t page_id(m0_bindex_t offset, struct m0_obj *obj)
Definition: utils.c:72
M0_INTERNAL struct m0_rm_domain * rm_domain_get(struct m0_client *instance)
Definition: io.c:59
M0_INTERNAL bool addr_is_network_aligned(void *addr)
Definition: utils.c:29
M0_INTERNAL void target_ioreq_fini(struct target_ioreq *ti)
Definition: io_nw_xfer.c:364
struct m0_pdclust_tgt_addr tgt
Definition: fd.c:110
M0_INTERNAL uint32_t io_seg_size(void)
Definition: utils.c:218
M0_INTERNAL uint32_t layout_k(struct m0_pdclust_layout *play)
Definition: utils.c:64
Definition: fid.h:38
M0_INTERNAL void ioreq_fop_fini(struct ioreq_fop *fop)
Definition: io_req_fop.c:1036
const struct m0_op_io_ops ioo_oostore_ops
M0_INTERNAL bool pargrp_iomap_invariant(const struct pargrp_iomap *map)
Definition: io_pargrp.c:203
M0_INTERNAL uint64_t obj_buffer_size(const struct m0_obj *obj)
Definition: utils.c:34
M0_INTERNAL uint64_t round_down(uint64_t val, uint64_t size)
Definition: utils.c:178
m0_bcount_t size
Definition: di.c:39
page_attr
static struct m0_fop * fop
Definition: item.c:57
M0_INTERNAL uint64_t page_nr(m0_bcount_t size, struct m0_obj *obj)
Definition: utils.c:49
static struct m0 instance
Definition: main.c:78
M0_INTERNAL uint64_t pargrp_id_find(m0_bindex_t index, const struct m0_op_io *ioo, const struct ioreq_fop *ir_fop)
Definition: io_pargrp.c:105
M0_INTERNAL struct m0_parity_math * parity_math(struct m0_op_io *ioo)
Definition: utils.c:124
M0_TL_DESCR_DECLARE(iofops, M0_EXTERN)
M0_INTERNAL uint64_t m0__page_size(const struct m0_op_io *ioo)
Definition: utils.c:41
const struct m0_bob_type pgiomap_bobtype
Definition: io_pargrp.c:62
Definition: pg.h:859
M0_INTERNAL void nw_xfer_request_fini(struct nw_xfer_request *xfer)
Definition: io_nw_xfer.c:2159
M0_INTERNAL uint64_t tolerance_of_level(struct m0_op_io *ioo, uint64_t lv)
Definition: utils.c:275
M0_INTERNAL bool data_buf_invariant(const struct data_buf *db)
Definition: io_pargrp.c:145
M0_HT_DESCR_DECLARE(tioreqht, M0_EXTERN)
M0_INTERNAL uint64_t data_size(struct m0_pdclust_layout *play)
Definition: utils.c:95
int32_t rc
Definition: trigger_fop.h:47
M0_INTERNAL uint64_t layout_unit_size(struct m0_pdclust_layout *play)
Definition: utils.c:80
M0_INTERNAL bool nw_xfer_request_invariant(const struct nw_xfer_request *xfer)
Definition: io_nw_xfer.c:340