Motr  M0
domain.c
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 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_NET
24 #include "lib/trace.h"
25 
26 #include "lib/assert.h"
27 #include "net/net_internal.h"
28 
34 static void net_domain_fini(struct m0_net_domain *dom);
35 
37  const struct m0_net_xprt *xprt)
38 {
39  int rc;
40 
41  M0_ENTRY();
43  M0_PRE(dom->nd_xprt == NULL);
44 
45  m0_mutex_init(&dom->nd_mutex);
46  m0_list_init(&dom->nd_registered_bufs);
47  m0_list_init(&dom->nd_tms);
48 
49  dom->nd_xprt_private = NULL;
50  dom->nd_xprt = xprt;
52  if (rc != 0) {
53  dom->nd_xprt = NULL; /* prevent call to xo_dom_fini */
56  return M0_RC(rc);
57  }
58  dom->nd_get_max_buffer_segment_size =
60  dom->nd_get_max_buffer_segments =
62  dom->nd_get_max_buffer_size =
64  dom->nd_get_max_buffer_desc_size =
67  return M0_RC(rc);
68 }
69 M0_EXPORTED(m0_net_domain_init);
70 
72 {
73  M0_ENTRY();
77  M0_LEAVE();
78 }
79 M0_EXPORTED(m0_net_domain_fini);
80 
81 static void net_domain_fini(struct m0_net_domain *dom)
82 {
84  M0_PRE(m0_list_is_empty(&dom->nd_tms));
85  M0_PRE(m0_list_is_empty(&dom->nd_registered_bufs));
86 
87  if (dom->nd_xprt != NULL) {
88  dom->nd_xprt->nx_ops->xo_dom_fini(dom);
89  dom->nd_xprt = NULL;
90  }
91  dom->nd_xprt_private = NULL;
92 
93  m0_list_fini(&dom->nd_tms);
94  m0_list_fini(&dom->nd_registered_bufs);
95  m0_mutex_fini(&dom->nd_mutex);
96 }
97 
98 #define DOM_GET_PARAM(Fn, Type) \
99 Type m0_net_domain_get_##Fn(struct m0_net_domain *dom) \
100 { \
101  Type rc; \
102  M0_PRE(dom != NULL); \
103  M0_PRE(dom->nd_xprt != NULL); \
104  rc = dom->nd_get_##Fn; \
105  return rc; \
106 }
107 
108 DOM_GET_PARAM(max_buffer_size, m0_bcount_t);
109 DOM_GET_PARAM(max_buffer_segment_size, m0_bcount_t);
110 DOM_GET_PARAM(max_buffer_segments, int32_t);
111 DOM_GET_PARAM(max_buffer_desc_size, m0_bcount_t);
112 
114 #undef M0_TRACE_SUBSYSTEM
115 
116 /*
117  * Local variables:
118  * c-indentation-style: "K&R"
119  * c-basic-offset: 8
120  * tab-width: 8
121  * fill-column: 79
122  * scroll-step: 1
123  * End:
124  */
const struct m0_net_xprt_ops * nx_ops
Definition: net.h:126
#define M0_PRE(cond)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
Definition: mutex.c:66
void m0_net_domain_fini(struct m0_net_domain *dom)
Definition: domain.c:71
#define NULL
Definition: misc.h:38
M0_INTERNAL void m0_list_init(struct m0_list *head)
Definition: list.c:29
M0_LEAVE()
M0_INTERNAL void m0_list_fini(struct m0_list *head)
Definition: list.c:36
uint64_t m0_bcount_t
Definition: types.h:77
struct m0_mutex m0_net_mutex
Definition: net.c:59
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
Definition: mutex.c:49
m0_bcount_t(* xo_get_max_buffer_desc_size)(const struct m0_net_domain *dom)
Definition: net.h:359
return M0_RC(rc)
#define M0_ENTRY(...)
Definition: trace.h:170
M0_INTERNAL bool m0_mutex_is_locked(const struct m0_mutex *mutex)
Definition: mutex.c:95
static struct m0_stob_domain * dom
Definition: storage.c:38
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
Definition: mutex.c:35
int32_t(* xo_get_max_buffer_segments)(const struct m0_net_domain *dom)
Definition: net.h:354
M0_INTERNAL bool m0_list_is_empty(const struct m0_list *head)
Definition: list.c:42
#define DOM_GET_PARAM(Fn, Type)
Definition: domain.c:98
static void net_domain_fini(struct m0_net_domain *dom)
Definition: domain.c:81
int m0_net_domain_init(struct m0_net_domain *dom, const struct m0_net_xprt *xprt)
Definition: domain.c:36
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
Definition: mutex.c:42
int(* xo_dom_init)(const struct m0_net_xprt *xprt, struct m0_net_domain *dom)
Definition: net.h:139
struct m0_net_xprt * xprt
Definition: module.c:61
m0_bcount_t(* xo_get_max_buffer_segment_size)(const struct m0_net_domain *dom)
Definition: net.h:346
int32_t rc
Definition: trigger_fop.h:47
m0_bcount_t(* xo_get_max_buffer_size)(const struct m0_net_domain *dom)
Definition: net.h:339