Motr  M0
storage_dev.h
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2015-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_IOSERVICE_STORAGE_DEV_H__
26 #define __MOTR_IOSERVICE_STORAGE_DEV_H__
27 
28 #include "lib/tlist.h"
29 #include "lib/mutex.h"
30 #include "lib/thread_pool.h"
31 #include "lib/chan.h"
32 #include "ha/note.h"
33 #include "conf/obj.h"
34 #include "sm/sm.h" /* m0_sm_ast */
35 
36 /* import */
37 struct m0_stob;
38 struct m0_stob_id;
39 struct m0_stob_domain;
40 struct m0_dtx;
41 struct m0_be_seg;
42 struct m0_conf_sdev;
43 struct m0_reqh;
44 
68 };
69 
77  struct m0_stob *isd_stob;
81  uint64_t isd_cid;
96  uint64_t isd_magic;
101  struct m0_ref isd_ref;
117 };
118 
119 M0_TL_DESCR_DECLARE(storage_dev, M0_EXTERN);
120 M0_TL_DECLARE(storage_dev, M0_EXTERN, struct m0_storage_dev);
121 
141 
142  /* Conf event callbacks provisioning. */
143 
152 };
153 
159 M0_INTERNAL int m0_storage_devs_init(struct m0_storage_devs *devs,
161  struct m0_be_seg *be_seg,
162  struct m0_stob_domain *bstore_dom,
163  struct m0_reqh *reqh);
167 M0_INTERNAL void m0_storage_devs_fini(struct m0_storage_devs *devs);
168 
172 M0_INTERNAL void m0_storage_devs_lock(struct m0_storage_devs *devs);
173 
177 M0_INTERNAL void m0_storage_devs_unlock(struct m0_storage_devs *devs);
178 
184 M0_INTERNAL void m0_storage_devs_use_directio(struct m0_storage_devs *devs,
185  bool directio);
186 
188 M0_INTERNAL void m0_storage_devs_locks_disable(struct m0_storage_devs *devs);
189 
193 M0_INTERNAL struct m0_storage_dev *
195  uint64_t cid);
199 M0_INTERNAL struct m0_storage_dev *
201  struct m0_stob_domain *dom);
202 
204 M0_INTERNAL void m0_storage_dev_get(struct m0_storage_dev *dev);
211 M0_INTERNAL void m0_storage_dev_put(struct m0_storage_dev *dev);
212 
218 M0_INTERNAL int m0_storage_dev_new_by_conf(struct m0_storage_devs *devs,
219  struct m0_conf_sdev *sdev,
220  bool force,
221  struct m0_storage_dev **dev);
222 
229 M0_INTERNAL int m0_storage_dev_new(struct m0_storage_devs *devs,
230  uint64_t cid,
231  const char *path,
232  uint64_t size,
233  struct m0_conf_sdev *sdev,
234  bool force,
235  struct m0_storage_dev **dev);
236 
242 M0_INTERNAL void m0_storage_dev_destroy(struct m0_storage_dev *dev);
243 
249 M0_INTERNAL void m0_storage_dev_attach(struct m0_storage_dev *dev,
250  struct m0_storage_devs *devs);
251 
260 M0_INTERNAL void m0_storage_dev_detach(struct m0_storage_dev *dev);
261 
265 M0_INTERNAL void m0_storage_devs_detach_all(struct m0_storage_devs *devs);
266 
277 };
278 
282 M0_INTERNAL void m0_storage_dev_space(struct m0_storage_dev *dev,
283  struct m0_storage_space *space);
284 
290 M0_INTERNAL int m0_storage_dev_format(struct m0_storage_dev *dev,
291  uint64_t cid);
292 
296 M0_INTERNAL int m0_storage_devs_fdatasync(struct m0_storage_devs *devs);
297 
303 M0_INTERNAL int m0_storage_dev_stob_create(struct m0_storage_devs *devs,
304  struct m0_stob_id *sid,
305  struct m0_dtx *dtx);
306 
310 M0_INTERNAL int m0_storage_dev_stob_destroy(struct m0_storage_devs *devs,
311  struct m0_stob *stob,
312  struct m0_dtx *dtx);
313 
320 M0_INTERNAL int m0_storage_dev_stob_find(struct m0_storage_devs *devs,
321  struct m0_stob_id *sid,
322  struct m0_stob **stob);
323 
327 M0_INTERNAL void m0_storage_dev_stob_put(struct m0_storage_devs *devs,
328  struct m0_stob *stob);
329 
331 #endif /* __MOTR_IOSERVICE_STORAGE_DEV_H__ */
332 
333 /*
334  * Local variables:
335  * c-indentation-style: "K&R"
336  * c-basic-offset: 8
337  * tab-width: 8
338  * fill-column: 80
339  * scroll-step: 1
340  * End:
341  */
M0_INTERNAL struct m0_storage_dev * m0_storage_devs_find_by_cid(struct m0_storage_devs *devs, uint64_t cid)
Definition: storage_dev.c:152
Definition: dtm.h:554
struct m0_parallel_pool sds_pool
Definition: storage_dev.h:138
struct m0_tlink isd_linkage
Definition: storage_dev.h:83
struct m0_stob * isd_stob
Definition: storage_dev.h:77
m0_conf_service_type
Definition: schema.h:194
m0_bcount_t sds_free_blocks
Definition: storage_dev.h:273
M0_INTERNAL int m0_storage_dev_stob_find(struct m0_storage_devs *devs, struct m0_stob_id *sid, struct m0_stob **stob)
Definition: storage_dev.c:868
M0_INTERNAL void m0_storage_dev_attach(struct m0_storage_dev *dev, struct m0_storage_devs *devs)
Definition: storage_dev.c:633
M0_INTERNAL void m0_storage_dev_stob_put(struct m0_storage_devs *devs, struct m0_stob *stob)
Definition: storage_dev.c:912
M0_INTERNAL void m0_storage_dev_get(struct m0_storage_dev *dev)
Definition: storage_dev.c:466
struct m0_stob_domain * isd_domain
Definition: storage_dev.h:79
enum m0_ha_obj_state isd_ha_state
Definition: storage_dev.h:92
uint64_t m0_bcount_t
Definition: types.h:77
struct m0_stob_domain * sds_back_domain
Definition: storage_dev.h:134
M0_INTERNAL void m0_storage_devs_use_directio(struct m0_storage_devs *devs, bool directio)
Definition: storage_dev.c:134
enum m0_storage_dev_type sds_type
Definition: storage_dev.h:128
struct m0_ref isd_ref
Definition: storage_dev.h:101
struct m0_tl sds_devices
Definition: storage_dev.h:132
M0_INTERNAL int m0_storage_dev_new_by_conf(struct m0_storage_devs *devs, struct m0_conf_sdev *sdev, bool force, struct m0_storage_dev **dev)
Definition: storage_dev.c:590
struct m0_mutex sds_lock
Definition: storage_dev.h:130
M0_INTERNAL int m0_storage_dev_new(struct m0_storage_devs *devs, uint64_t cid, const char *path, uint64_t size, struct m0_conf_sdev *conf_sdev, bool force, struct m0_storage_dev **dev)
Definition: storage_dev.c:576
Definition: refs.h:34
M0_INTERNAL void m0_storage_devs_lock(struct m0_storage_devs *devs)
Definition: storage_dev.c:71
Definition: stob.h:163
static struct m0_stob * stob
Definition: storage.c:39
struct m0_clink isd_clink
Definition: storage_dev.h:88
static struct m0_be_seg * be_seg
Definition: extmap.c:48
M0_INTERNAL int m0_storage_dev_stob_destroy(struct m0_storage_devs *devs, struct m0_stob *stob, struct m0_dtx *dtx)
Definition: storage_dev.c:836
Definition: tlist.h:251
m0_ha_obj_state
Definition: note.h:119
static struct m0_stob_domain * dom
Definition: storage.c:38
struct m0_mutex isd_detached_lock
Definition: storage_dev.h:107
Definition: reqh.h:94
enum m0_conf_service_type isd_srv_type
Definition: storage_dev.h:94
Definition: chan.h:229
M0_INTERNAL void m0_storage_devs_fini(struct m0_storage_devs *devs)
Definition: storage_dev.c:107
Definition: seg.h:66
M0_INTERNAL int m0_storage_dev_format(struct m0_storage_dev *dev, uint64_t cid)
Definition: storage_dev.c:767
enum m0_storage_dev_type isd_type
Definition: storage_dev.h:75
M0_INTERNAL struct m0_storage_dev * m0_storage_devs_find_by_dom(struct m0_storage_devs *devs, struct m0_stob_domain *dom)
Definition: storage_dev.c:161
M0_INTERNAL void m0_storage_devs_detach_all(struct m0_storage_devs *devs)
Definition: storage_dev.c:743
struct m0_be_seg * sds_be_seg
Definition: storage_dev.h:136
M0_INTERNAL int m0_storage_devs_init(struct m0_storage_devs *devs, enum m0_storage_dev_type type, struct m0_be_seg *be_seg, struct m0_stob_domain *bstore_dom, struct m0_reqh *reqh)
Definition: storage_dev.c:83
struct m0_clink sds_conf_exp
Definition: storage_dev.h:147
M0_INTERNAL void m0_storage_dev_destroy(struct m0_storage_dev *dev)
Definition: storage_dev.c:603
m0_bcount_t sds_block_size
Definition: storage_dev.h:274
struct m0_reqh reqh
Definition: rm_foms.c:48
M0_INTERNAL void m0_storage_devs_locks_disable(struct m0_storage_devs *devs)
Definition: storage_dev.c:145
M0_INTERNAL void m0_storage_dev_detach(struct m0_storage_dev *dev)
Definition: storage_dev.c:652
M0_INTERNAL void m0_storage_dev_space(struct m0_storage_dev *dev, struct m0_storage_space *space)
Definition: storage_dev.c:674
M0_INTERNAL int m0_storage_dev_stob_create(struct m0_storage_devs *devs, struct m0_stob_id *sid, struct m0_dtx *dtx)
Definition: storage_dev.c:810
M0_TL_DECLARE(storage_dev, M0_EXTERN, struct m0_storage_dev)
M0_TL_DESCR_DECLARE(storage_dev, M0_EXTERN)
uint64_t isd_magic
Definition: storage_dev.h:96
m0_bcount_t size
Definition: di.c:39
m0_bcount_t sds_avail_blocks
Definition: storage_dev.h:275
struct m0_chan isd_detached_chan
Definition: storage_dev.h:106
M0_INTERNAL void m0_storage_devs_unlock(struct m0_storage_devs *devs)
Definition: storage_dev.c:77
M0_INTERNAL void m0_storage_dev_put(struct m0_storage_dev *dev)
Definition: storage_dev.c:471
uint64_t isd_cid
Definition: storage_dev.h:81
int type
Definition: dir.c:1031
m0_storage_dev_type
Definition: storage_dev.h:65
char * isd_filename
Definition: storage_dev.h:116
m0_bcount_t sds_total_size
Definition: storage_dev.h:276
Definition: mutex.h:47
M0_INTERNAL int m0_storage_devs_fdatasync(struct m0_storage_devs *sdevs)
Definition: storage_dev.c:802
struct m0_clink sds_conf_ready_async
Definition: storage_dev.h:149
bool sds_locks_disabled
Definition: storage_dev.h:151