Motr  M0
layout.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_DIX_LAYOUT_H__
26 #define __MOTR_DIX_LAYOUT_H__
27 
28 #include "lib/types.h"
29 #include "fid/fid.h"
30 #include "fid/fid_xc.h"
31 #include "dix/imask.h"
32 #include "dix/imask_xc.h"
33 #include "lib/buf.h"
34 #include "lib/types_xc.h"
35 
56 /* Import */
57 struct m0_pdclust_layout;
58 struct m0_pdclust_instance;
59 struct m0_pool_version;
60 struct m0_layout_domain;
61 
68 };
69 
74 };
75 
76 struct m0_dix_ldesc {
77  uint32_t ld_hash_fnc;
78  struct m0_fid ld_pver;
80 } M0_XCA_RECORD M0_XCA_DOMAIN(rpc);
81 
84  struct m0_fid ca_pver;
85  uint64_t ca_lid;
86 } M0_XCA_RECORD M0_XCA_DOMAIN(rpc);
87 
90  uint64_t cr_lid;
92 } M0_XCA_RECORD M0_XCA_DOMAIN(rpc);
93 
97 } M0_XCA_SEQUENCE M0_XCA_DOMAIN(rpc);
98 
99 struct m0_dix_layout {
100  uint32_t dl_type;
101  union {
102  uint64_t dl_id
103  M0_XCA_TAG("DIX_LTYPE_ID");
104  struct m0_dix_ldesc dl_desc
106  struct m0_dix_capture_ldesc dl_cap_desc
108  struct m0_dix_composite_ldesc dl_comp_desc
110  } u;
111 } M0_XCA_UNION M0_XCA_DOMAIN(rpc);
112 
113 struct m0_dix_linst {
117 };
118 
136 
138  uint32_t dit_W;
139 
141  uint64_t dit_unit;
142 
147  struct m0_buf dit_key;
148 };
149 
154 M0_INTERNAL void m0_dix_target(struct m0_dix_linst *inst,
155  uint64_t unit,
156  struct m0_buf *key,
157  uint64_t *out_id);
158 
162 M0_INTERNAL uint32_t m0_dix_devices_nr(struct m0_dix_linst *linst);
163 
167 M0_INTERNAL struct m0_pooldev *m0_dix_tgt2sdev(struct m0_dix_linst *linst,
168  uint64_t tgt);
169 
175 M0_INTERNAL int m0_dix_layout_init(struct m0_dix_linst *dli,
176  struct m0_layout_domain *domain,
177  const struct m0_fid *fid,
178  uint64_t layout_id,
179  struct m0_pool_version *pver,
180  struct m0_dix_ldesc *dld);
181 
185 M0_INTERNAL void m0_dix_layout_fini(struct m0_dix_linst *dli);
186 
190 M0_INTERNAL int m0_dix_ldesc_init(struct m0_dix_ldesc *ld,
191  struct m0_ext *range,
192  m0_bcount_t range_nr,
194  struct m0_fid *pver);
195 
201 M0_INTERNAL int m0_dix_ldesc_copy(struct m0_dix_ldesc *dst,
202  const struct m0_dix_ldesc *src);
203 
207 M0_INTERNAL void m0_dix_ldesc_fini(struct m0_dix_ldesc *ld);
208 
221 M0_INTERNAL
223  const struct m0_fid *index,
224  struct m0_layout_domain *ldom,
225  struct m0_pool_version *pver,
226  struct m0_dix_ldesc *ldesc,
227  struct m0_buf *key);
228 
235 M0_INTERNAL void m0_dix_layout_iter_next(struct m0_dix_layout_iter *iter,
236  uint64_t *tgt);
237 
244 M0_INTERNAL void m0_dix_layout_iter_goto(struct m0_dix_layout_iter *iter,
245  uint64_t unit_nr);
249 M0_INTERNAL void m0_dix_layout_iter_reset(struct m0_dix_layout_iter *iter);
250 
256 M0_INTERNAL void m0_dix_layout_iter_get_at(struct m0_dix_layout_iter *iter,
257  uint64_t unit,
258  uint64_t *tgt);
259 
265 M0_INTERNAL uint32_t m0_dix_liter_N(struct m0_dix_layout_iter *iter);
266 
270 M0_INTERNAL uint32_t m0_dix_liter_P(struct m0_dix_layout_iter *iter);
271 
275 M0_INTERNAL uint32_t m0_dix_liter_K(struct m0_dix_layout_iter *iter);
276 
280 M0_INTERNAL uint32_t m0_dix_liter_S(struct m0_dix_layout_iter *iter);
281 
285 M0_INTERNAL uint32_t m0_dix_liter_W(struct m0_dix_layout_iter *iter);
286 
290 M0_INTERNAL uint32_t m0_dix_liter_spare_offset(struct m0_dix_layout_iter *iter);
291 
296 M0_INTERNAL
297 uint32_t m0_dix_liter_unit_classify(struct m0_dix_layout_iter *iter,
298  uint64_t unit);
299 
303 M0_INTERNAL void m0_dix_layout_iter_fini(struct m0_dix_layout_iter *iter);
304 
308 M0_INTERNAL bool m0_dix_layout_eq(const struct m0_dix_layout *layout1,
309  const struct m0_dix_layout *layout2);
310 
312 #endif /* __MOTR_DIX_LAYOUT_H__ */
313 
314 /*
315  * Local variables:
316  * c-indentation-style: "K&R"
317  * c-basic-offset: 8
318  * tab-width: 8
319  * fill-column: 80
320  * scroll-step: 1
321  * End:
322  */
323 /*
324  * vim: tabstop=8 shiftwidth=8 noexpandtab textwidth=80 nowrap
325  */
M0_INTERNAL uint32_t m0_dix_liter_K(struct m0_dix_layout_iter *iter)
Definition: layout.c:280
static struct m0_bufvec dst
Definition: xform.c:61
struct m0_pdclust_instance * li_pi
Definition: layout.h:116
dix_layout_type
Definition: layout.h:62
struct m0_dix_linst dit_linst
Definition: layout.h:135
M0_INTERNAL int m0_dix_layout_iter_init(struct m0_dix_layout_iter *iter, const struct m0_fid *index, struct m0_layout_domain *ldom, struct m0_pool_version *pver, struct m0_dix_ldesc *ldesc, struct m0_buf *key)
Definition: layout.c:203
M0_INTERNAL void m0_dix_target(struct m0_dix_linst *inst, uint64_t unit, struct m0_buf *key, uint64_t *out_id)
Definition: layout.c:144
uint64_t m0_bcount_t
Definition: types.h:77
#define M0_XCA_TAG(value)
Definition: xcode_attr.h:57
struct m0_uint128 ca_orig_id
Definition: layout.h:83
M0_INTERNAL uint32_t m0_dix_liter_S(struct m0_dix_layout_iter *iter)
Definition: layout.c:285
M0_INTERNAL void m0_dix_layout_fini(struct m0_dix_linst *li)
Definition: layout.c:102
M0_INTERNAL void m0_dix_layout_iter_fini(struct m0_dix_layout_iter *iter)
Definition: layout.c:315
M0_INTERNAL int m0_dix_ldesc_copy(struct m0_dix_ldesc *dst, const struct m0_dix_ldesc *src)
Definition: layout.c:189
struct m0_fid fid
Definition: di.c:46
struct m0_fid ca_pver
Definition: layout.h:84
Definition: buf.h:37
M0_INTERNAL bool m0_dix_layout_eq(const struct m0_dix_layout *layout1, const struct m0_dix_layout *layout2)
Definition: layout.c:322
M0_INTERNAL uint32_t m0_dix_liter_spare_offset(struct m0_dix_layout_iter *iter)
Definition: layout.c:290
M0_INTERNAL void m0_dix_layout_iter_next(struct m0_dix_layout_iter *iter, uint64_t *tgt)
Definition: layout.c:249
struct m0_fid pver
Definition: idx_dix.c:74
M0_INTERNAL int m0_dix_ldesc_init(struct m0_dix_ldesc *ld, struct m0_ext *range, m0_bcount_t range_nr, enum m0_dix_hash_fnc_type htype, struct m0_fid *pver)
Definition: layout.c:171
M0_INTERNAL void m0_dix_layout_iter_get_at(struct m0_dix_layout_iter *iter, uint64_t unit, uint64_t *tgt)
Definition: layout.c:258
int layout_id
Definition: dir.c:331
struct m0_uint128 cr_subobj
Definition: layout.h:89
uint64_t ca_lid
Definition: layout.h:85
M0_INTERNAL uint32_t m0_dix_liter_unit_classify(struct m0_dix_layout_iter *iter, uint64_t unit)
Definition: layout.c:295
struct m0_dix_ldesc * li_ldescr
Definition: layout.h:114
M0_INTERNAL uint32_t m0_dix_liter_W(struct m0_dix_layout_iter *iter)
Definition: layout.c:265
uint32_t dl_type
Definition: layout.h:100
struct m0_dix_imask ld_imask
Definition: layout.h:79
union m0_dix_layout::@145 u
struct m0_fid ld_pver
Definition: layout.h:78
M0_INTERNAL void m0_dix_layout_iter_reset(struct m0_dix_layout_iter *iter)
Definition: layout.c:310
M0_INTERNAL void m0_dix_ldesc_fini(struct m0_dix_ldesc *ld)
Definition: layout.c:197
struct m0_dix_composite_layer * cld_layers
Definition: layout.h:96
struct m0_pdclust_tgt_addr tgt
Definition: fd.c:110
uint64_t dit_unit
Definition: layout.h:141
Definition: ext.h:37
Definition: fid.h:38
M0_INTERNAL void m0_dix_layout_iter_goto(struct m0_dix_layout_iter *iter, uint64_t unit)
Definition: layout.c:302
M0_INTERNAL uint32_t m0_dix_liter_N(struct m0_dix_layout_iter *iter)
Definition: layout.c:270
uint32_t ld_hash_fnc
Definition: layout.h:77
static const struct m0_dtm_history_type htype
Definition: dtx.c:131
uint32_t dit_W
Definition: layout.h:138
struct m0_pdclust_layout * li_pl
Definition: layout.h:115
static struct m0_layout_domain domain
Definition: layout.c:49
struct m0_buf dit_key
Definition: layout.h:147
M0_INTERNAL int m0_dix_layout_init(struct m0_dix_linst *dli, struct m0_layout_domain *domain, const struct m0_fid *fid, uint64_t layout_id, struct m0_pool_version *pver, struct m0_dix_ldesc *dld)
Definition: layout.c:86
M0_INTERNAL uint32_t m0_dix_devices_nr(struct m0_dix_linst *linst)
Definition: layout.c:68
struct m0_pdclust_src_addr src
Definition: fd.c:108
M0_INTERNAL uint32_t m0_dix_liter_P(struct m0_dix_layout_iter *iter)
Definition: layout.c:275
enum dix_layout_type M0_XCA_DOMAIN
M0_INTERNAL struct m0_pooldev * m0_dix_tgt2sdev(struct m0_dix_linst *linst, uint64_t tgt)
Definition: layout.c:76
m0_dix_hash_fnc_type
Definition: layout.h:70
Definition: idx_mock.c:47