Motr  M0
file.h
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2012-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_SNS_CM_FILE_H__
26 #define __MOTR_SNS_CM_FILE_H__
27 
45 };
46 
53  uint64_t sf_magic;
54 
56  struct m0_file sf_file;
57 
63  struct m0_fid sf_fid;
64 
66 
67  uint64_t sf_max_group;
68 
70  struct m0_poolmach *sf_pm;
71 
72  struct m0_pooldev *sf_pd;
73 
75 
78 
79  struct m0_mutex sf_lock;
80 
83 
86 
89 
92 
94  struct m0_sns_cm *sf_scm;
95 
101  uint64_t sf_ag_nr;
102 
110  struct m0_ref sf_ref;
111 
112  struct m0_sm sf_sm;
113 
115 
117 
119 
121 
124  int sf_rc;
125 };
126 
128 M0_INTERNAL int m0_sns_cm_fctx_init(struct m0_sns_cm *scm,
129  const struct m0_fid *fid,
130  struct m0_sns_cm_file_ctx **sc_fctx);
131 
132 M0_INTERNAL void m0_sns_cm_fctx_fini(struct m0_sns_cm_file_ctx *fctx);
133 
134 /*
135  * Invokes async file lock api and adds the given fctx object to
136  * m0_sns_cm::sc_file_ctx hash table. Its the responsibility of
137  * the caller to wait for the lock on rm's incoming channel where
138  * the state changes are announced.
139  * @see m0_sns_cm_file_lock_wait()
140  * @ret -EAGAIN.
141  */
142 M0_INTERNAL int m0_sns_cm_file_lock(struct m0_sns_cm *scm,
143  const struct m0_fid *fid,
144  struct m0_sns_cm_file_ctx **out);
152 M0_INTERNAL int
154  struct m0_fom *fom);
155 
162 M0_INTERNAL void m0_sns_cm_file_unlock(struct m0_sns_cm *scm,
163  struct m0_fid *fid);
164 
170 M0_INTERNAL struct m0_sns_cm_file_ctx *
171 m0_sns_cm_fctx_locate(struct m0_sns_cm *scm, struct m0_fid *fid);
172 
173 M0_INTERNAL struct m0_sns_cm_file_ctx *
174 m0_sns_cm_fctx_get(struct m0_sns_cm *scm, const struct m0_cm_ag_id *id);
175 
176 M0_INTERNAL void m0_sns_cm_fctx_put(struct m0_sns_cm *scm,
177  const struct m0_cm_ag_id *id);
178 
179 M0_INTERNAL void m0_sns_cm_fctx_cleanup(struct m0_sns_cm *scm);
180 M0_INTERNAL void m0_sns_cm_flock_resource_set(struct m0_sns_cm *scm);
181 
182 M0_INTERNAL int
184 
185 M0_INTERNAL void
187  struct m0_fom *fom);
188 
189 M0_INTERNAL int m0_sns_cm_fctx_state_get(struct m0_sns_cm_file_ctx *fctx);
190 
191 M0_INTERNAL struct m0_pool_version *
193 
194 M0_INTERNAL void m0_sns_cm_file_fwd_map(struct m0_sns_cm_file_ctx *fctx,
195  const struct m0_pdclust_src_addr *sa,
196  struct m0_pdclust_tgt_addr *ta);
197 
198 M0_INTERNAL void m0_sns_cm_file_bwd_map(struct m0_sns_cm_file_ctx *fctx,
199  const struct m0_pdclust_tgt_addr *ta,
200  struct m0_pdclust_src_addr *sa);
201 
202 M0_INTERNAL void m0_sns_cm_fctx_lock(struct m0_sns_cm_file_ctx *fctx);
203 M0_INTERNAL void m0_sns_cm_fctx_unlock(struct m0_sns_cm_file_ctx *fctx);
204 
205 M0_INTERNAL uint64_t m0_sns_cm_file_data_units(struct m0_sns_cm_file_ctx *fctx);
206 M0_INTERNAL bool m0_sns_cm_file_unit_is_EOF(struct m0_pdclust_layout *pl,
207  uint64_t nr_max_data_units,
208  uint64_t group, uint32_t unit);
209 
210 M0_HT_DESCR_DECLARE(m0_scmfctx, M0_EXTERN);
211 M0_HT_DECLARE(m0_scmfctx, M0_EXTERN, struct m0_sns_cm_file_ctx,
212  struct m0_fid);
213 
216 #endif /* __MOTR_SNS_CM_FILE_H__ */
217 /*
218  * Local variables:
219  * c-indentation-style: "K&R"
220  * c-basic-offset: 8
221  * tab-width: 8
222  * fill-column: 80
223  * scroll-step: 1
224  * End:
225  */
226 
Definition: cm.h:205
struct m0_sm_ast sf_attr_ast
Definition: file.h:116
M0_INTERNAL uint64_t m0_sns_cm_file_data_units(struct m0_sns_cm_file_ctx *fctx)
Definition: file.c:768
M0_INTERNAL void m0_sns_cm_file_fwd_map(struct m0_sns_cm_file_ctx *fctx, const struct m0_pdclust_src_addr *sa, struct m0_pdclust_tgt_addr *ta)
Definition: file.c:750
M0_INTERNAL bool m0_sns_cm_file_unit_is_EOF(struct m0_pdclust_layout *pl, uint64_t nr_max_data_units, uint64_t group, uint32_t unit)
Definition: file.c:786
uint64_t sf_max_group
Definition: file.h:67
struct m0_layout * sf_layout
Definition: file.h:74
uint64_t sf_nr_ios_visited
Definition: file.h:123
M0_INTERNAL void m0_sns_cm_fctx_unlock(struct m0_sns_cm_file_ctx *fctx)
Definition: file.c:58
static struct m0_sns_cm * scm
Definition: cm.c:64
M0_INTERNAL int m0_sns_cm_file_lock(struct m0_sns_cm *scm, const struct m0_fid *fid, struct m0_sns_cm_file_ctx **out)
Definition: file.c:404
struct m0_fid sf_fid
Definition: file.h:63
Definition: sm.h:504
M0_INTERNAL void m0_sns_cm_fctx_fini(struct m0_sns_cm_file_ctx *fctx)
Definition: file.c:285
struct m0_poolmach * sf_pm
Definition: file.h:70
M0_INTERNAL int m0_sns_cm_fctx_init(struct m0_sns_cm *scm, const struct m0_fid *fid, struct m0_sns_cm_file_ctx **sc_fctx)
Definition: file.c:246
M0_INTERNAL void m0_sns_cm_file_attr_and_layout_wait(struct m0_sns_cm_file_ctx *fctx, struct m0_fom *fom)
Definition: file.c:744
struct m0_hlink sf_sc_link
Definition: file.h:82
uint64_t sf_ag_nr
Definition: file.h:101
struct m0_fid fid
Definition: di.c:46
struct m0_pooldev * sf_pd
Definition: file.h:72
M0_INTERNAL struct m0_sns_cm_file_ctx * m0_sns_cm_fctx_get(struct m0_sns_cm *scm, const struct m0_cm_ag_id *id)
Definition: file.c:457
M0_HT_DECLARE(m0_scmfctx, M0_EXTERN, struct m0_sns_cm_file_ctx, struct m0_fid)
struct m0_sns_cm * sf_scm
Definition: file.h:94
M0_INTERNAL void m0_sns_cm_file_bwd_map(struct m0_sns_cm_file_ctx *fctx, const struct m0_pdclust_tgt_addr *ta, struct m0_pdclust_src_addr *sa)
Definition: file.c:759
M0_INTERNAL int m0_sns_cm_file_lock_wait(struct m0_sns_cm_file_ctx *fctx, struct m0_fom *fom)
Definition: file.c:370
struct m0_rm_remote sf_creditor
Definition: file.h:88
Definition: refs.h:34
M0_INTERNAL void m0_sns_cm_file_unlock(struct m0_sns_cm *scm, struct m0_fid *fid)
Definition: file.c:504
M0_INTERNAL struct m0_pool_version * m0_sns_cm_pool_version_get(struct m0_sns_cm_file_ctx *fctx)
Definition: file.c:686
struct m0_clink sf_fini_clink
Definition: file.h:120
struct m0_sm_ast sf_fini_ast
Definition: file.h:118
Definition: dump.c:103
static void group(void)
Definition: sm.c:386
M0_INTERNAL void m0_sns_cm_fctx_lock(struct m0_sns_cm_file_ctx *fctx)
Definition: file.c:53
Definition: fom.h:481
uint64_t sf_magic
Definition: file.h:53
M0_INTERNAL void m0_sns_cm_fctx_cleanup(struct m0_sns_cm *scm)
Definition: file.c:180
struct m0_sm_group * sf_group
Definition: file.h:114
Definition: fid.h:38
struct m0_ref sf_ref
Definition: file.h:110
m0_sns_cm_fctx_state
Definition: file.h:35
M0_HT_DESCR_DECLARE(m0_scmfctx, M0_EXTERN)
struct m0_rm_incoming sf_rin
Definition: file.h:91
Definition: sm.h:301
M0_INTERNAL int m0_sns_cm_file_attr_and_layout(struct m0_sns_cm_file_ctx *fctx)
Definition: file.c:694
M0_INTERNAL struct m0_sns_cm_file_ctx * m0_sns_cm_fctx_locate(struct m0_sns_cm *scm, struct m0_fid *fid)
Definition: file.c:441
struct m0_sm sf_sm
Definition: file.h:112
M0_INTERNAL int m0_sns_cm_fctx_state_get(struct m0_sns_cm_file_ctx *fctx)
Definition: file.c:137
struct m0_cob_attr sf_attr
Definition: file.h:65
struct m0_pdclust_instance * sf_pi
Definition: file.h:77
static struct m0_sns_cm_file_ctx fctx
Definition: net.c:55
#define out(...)
Definition: gen.c:41
struct m0_file sf_file
Definition: file.h:56
Definition: file.h:81
struct m0_rm_owner sf_owner
Definition: file.h:85
Definition: mutex.h:47
struct m0_mutex sf_lock
Definition: file.h:79
M0_INTERNAL void m0_sns_cm_fctx_put(struct m0_sns_cm *scm, const struct m0_cm_ag_id *id)
Definition: file.c:481
Definition: ag.h:49
M0_INTERNAL void m0_sns_cm_flock_resource_set(struct m0_sns_cm *scm)
Definition: file.c:201