Motr  M0
rm.h
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2013-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_RM_RM_H__
26 #define __MOTR_RM_RM_H__
27 
28 #include "lib/tlist.h"
29 #include "lib/types.h"
30 #include "lib/cookie.h"
31 #include "lib/chan.h" /* m0_clink */
32 #include "fid/fid.h" /* m0_fid */
33 #include "net/net.h"
34 #include "sm/sm.h"
35 #include "rm/rm_ha.h" /* m0_rm_ha_tracker */
36 
213 /* import */
214 struct m0_bufvec_cursor;
215 
216 /* export */
217 struct m0_rm_domain;
218 struct m0_rm_resource;
219 struct m0_rm_resource_ops;
220 struct m0_rm_resource_type;
222 struct m0_rm_owner;
223 struct m0_rm_remote;
224 struct m0_rm_loan;
225 struct m0_rm_group;
226 struct m0_rm_credit;
227 struct m0_rm_credit_ops;
228 struct m0_rm_incoming;
229 struct m0_rm_incoming_ops;
230 struct m0_rm_outgoing;
231 struct m0_rm_lease;
232 
233 enum {
235 };
236 
240 enum {
242 };
243 
264 };
265 
266 extern const struct m0_uint128 m0_rm_no_group;
267 
279 struct m0_rm_domain {
288 };
289 
305  const struct m0_rm_resource_ops *r_ops;
315  struct m0_tl r_remotes;
323  struct m0_tl r_local;
330  uint32_t r_ref;
331  uint64_t r_magix;
332 };
333 
340  int (*rop_credit_decode)(struct m0_rm_resource *resource,
341  struct m0_rm_credit *credit,
342  struct m0_bufvec_cursor *cur);
359  void (*rop_policy)(struct m0_rm_resource *resource,
360  struct m0_rm_incoming *in);
365  void (*rop_credit_init)(struct m0_rm_resource *resource,
366  struct m0_rm_credit *credit);
367 
368  void (*rop_resource_free)(struct m0_rm_resource *resource);
369 };
370 
374 };
375 
389  const char *rt_name;
403  uint64_t rt_id;
415  uint32_t rt_nr_resources;
429 
431 
448 };
449 
454  bool (*rto_eq)(const struct m0_rm_resource *resource0,
455  const struct m0_rm_resource *resource1);
459  bool (*rto_is)(const struct m0_rm_resource *resource,
460  uint64_t id);
464  m0_bcount_t (*rto_len) (const struct m0_rm_resource *resource);
469  struct m0_rm_resource **resource);
474  const struct m0_rm_resource *resource);
475 };
476 
500 struct m0_rm_credit {
502  const struct m0_rm_credit_ops *cr_ops;
514  uint64_t cr_datum;
524  struct m0_tl cr_pins;
525  uint64_t cr_magix;
526 };
527 
537  void (*cro_free)(struct m0_rm_credit *self);
541  int (*cro_encode)(struct m0_rm_credit *self,
542  struct m0_bufvec_cursor *cur);
546  int (*cro_decode)(struct m0_rm_credit *self,
547  struct m0_bufvec_cursor *cur);
551  m0_bcount_t (*cro_len) (const struct m0_rm_credit *self);
552 
579  bool (*cro_intersects) (const struct m0_rm_credit *self,
580  const struct m0_rm_credit *c1);
584  bool (*cro_is_subset) (const struct m0_rm_credit *self,
585  const struct m0_rm_credit *c1);
590  int (*cro_join) (struct m0_rm_credit *self,
591  const struct m0_rm_credit *c1);
597  int (*cro_disjoin) (struct m0_rm_credit *self,
598  const struct m0_rm_credit *c1,
599  struct m0_rm_credit *intersection);
618  bool (*cro_conflicts) (const struct m0_rm_credit *self,
619  const struct m0_rm_credit *c1);
660  int (*cro_diff)(struct m0_rm_credit *self,
661  const struct m0_rm_credit *c1);
667  const struct m0_rm_credit *self);
671  void (*cro_initial_capital)(struct m0_rm_credit *self);
673 };
674 
682 };
683 
747 struct m0_rm_remote {
782  uint64_t rem_id;
788  bool rem_dead;
789  uint64_t rem_magix;
790 };
791 
839 
864 };
865 
866 enum {
874 };
875 
894 };
895 
918 };
919 
1004 struct m0_rm_owner {
1005  struct m0_sm ro_sm;
1011  struct m0_fid ro_fid;
1066  uint64_t ro_id;
1077  uint64_t ro_seq;
1078  uint64_t ro_magix;
1079 };
1080 
1081 enum {
1087 };
1088 
1098 struct m0_rm_loan {
1111  uint64_t rl_id;
1112  uint64_t rl_magix;
1113 };
1114 
1150 };
1151 
1177 };
1178 
1188  RIF_MAY_REVOKE = (1 << 0),
1192  RIF_MAY_BORROW = (1 << 1),
1213  RIF_LOCAL_WAIT = (1 << 2),
1220  RIF_LOCAL_TRY = (1 << 3),
1228  RIF_RESERVE = (1 << 4),
1229 };
1230 
1265  uint64_t rrp_seq;
1266 };
1267 
1268 
1436  struct m0_sm rin_sm;
1446  int32_t rin_rc;
1448  uint64_t rin_flags;
1466  struct m0_tl rin_pins;
1478  uint64_t rin_magix;
1479 };
1480 
1493  void (*rio_complete)(struct m0_rm_incoming *in, int32_t rc);
1498  void (*rio_conflict)(struct m0_rm_incoming *in);
1499 };
1500 
1520 };
1521 
1545  /*
1546  * The error code (from reply or timeout) for this outgoing request.
1547  */
1548  int32_t rog_rc;
1552  bool rog_sent;
1553  uint64_t rog_magix;
1554 };
1555 
1557  M0_RPF_TRACK = (1 << 0),
1558  M0_RPF_PROTECT = (1 << 1),
1559  M0_RPF_BARRIER = (1 << 2)
1560 };
1561 
1675 struct m0_rm_pin {
1676  uint32_t rp_flags;
1690  uint64_t rp_magix;
1691 };
1692 
1693 M0_INTERNAL void m0_rm_domain_init(struct m0_rm_domain *dom);
1694 M0_INTERNAL void m0_rm_domain_fini(struct m0_rm_domain *dom);
1695 
1702 M0_INTERNAL int m0_rm_type_register(struct m0_rm_domain *dom,
1703  struct m0_rm_resource_type *rt);
1704 
1711 M0_INTERNAL void m0_rm_type_deregister(struct m0_rm_resource_type *rtype);
1712 
1716 M0_INTERNAL struct m0_rm_resource_type *
1718  const uint64_t rtype_id);
1719 
1724 M0_INTERNAL struct m0_rm_resource *
1726  const struct m0_rm_resource *res);
1727 
1740 M0_INTERNAL void m0_rm_resource_add(struct m0_rm_resource_type *rtype,
1741  struct m0_rm_resource *res);
1750 M0_INTERNAL void m0_rm_resource_del(struct m0_rm_resource *res);
1751 
1759 M0_INTERNAL void m0_rm_resource_free(struct m0_rm_resource *res);
1760 
1767 M0_INTERNAL int m0_rm_resource_encode(struct m0_rm_resource *res,
1768  struct m0_buf *buf);
1769 
1773 M0_INTERNAL void
1774 m0_rm_resource_initial_credit(const struct m0_rm_resource *resource,
1775  struct m0_rm_credit *credit);
1776 
1788 M0_INTERNAL void m0_rm_owner_init(struct m0_rm_owner *owner,
1789  struct m0_fid *fid,
1790  const struct m0_uint128 *group,
1791  struct m0_rm_resource *res,
1792  struct m0_rm_remote *creditor);
1793 
1799 M0_INTERNAL void m0_rm_owner_init_rfid(struct m0_rm_owner *owner,
1800  const struct m0_uint128 *group,
1801  struct m0_rm_resource *res,
1802  struct m0_rm_remote *creditor);
1803 
1818 M0_INTERNAL int m0_rm_owner_selfadd(struct m0_rm_owner *owner,
1819  struct m0_rm_credit *r);
1820 
1829 M0_INTERNAL void m0_rm_owner_windup(struct m0_rm_owner *owner);
1830 
1840 M0_INTERNAL void m0_rm_owner_creditor_reset(struct m0_rm_owner *owner,
1841  struct m0_rm_remote *creditor);
1842 
1851 M0_INTERNAL int m0_rm_owner_timedwait(struct m0_rm_owner *owner,
1852  uint64_t state,
1853  const m0_time_t abs_timeout);
1865 M0_INTERNAL void m0_rm_owner_fini(struct m0_rm_owner *owner);
1866 
1870 M0_INTERNAL void m0_rm_owner_lock(struct m0_rm_owner *owner);
1874 M0_INTERNAL void m0_rm_owner_unlock(struct m0_rm_owner *owner);
1875 
1885 M0_INTERNAL void m0_rm_credit_init(struct m0_rm_credit *credit,
1886  struct m0_rm_owner *owner);
1887 
1891 M0_INTERNAL void m0_rm_credit_fini(struct m0_rm_credit *credit);
1892 
1899 M0_INTERNAL int m0_rm_credit_dup(const struct m0_rm_credit *src_credit,
1900  struct m0_rm_credit **dest_credit);
1901 
1902 /*
1903  * Makes another copy of credit src.
1904  */
1905 M0_INTERNAL int
1906 m0_rm_credit_copy(struct m0_rm_credit *dst, const struct m0_rm_credit *src);
1907 
1920 M0_INTERNAL void m0_rm_incoming_init(struct m0_rm_incoming *in,
1921  struct m0_rm_owner *owner,
1923  enum m0_rm_incoming_policy policy,
1924  uint64_t flags);
1925 
1931 M0_INTERNAL void m0_rm_incoming_fini(struct m0_rm_incoming *in);
1932 
1939 M0_INTERNAL void m0_rm_remote_init(struct m0_rm_remote *rem,
1940  struct m0_rm_resource *res);
1941 
1951 M0_INTERNAL void m0_rm_remote_fini(struct m0_rm_remote *rem);
1952 
1957 #define M0_RM_REMOTE_GET(remote) \
1958 ({ \
1959  struct m0_rm_remote *_r = (remote); \
1960  int _c = m0_ref_read(&_r->rem_refcnt); \
1961  M0_LOG(M0_DEBUG, "rm_remote=%p ref: %d -> %d", _r, _c, _c + 1); \
1962  m0_ref_get(&_r->rem_refcnt); \
1963 })
1964 
1971 #define M0_RM_REMOTE_PUT(remote) \
1972 ({ \
1973  int _c; \
1974  struct m0_rm_remote *_r = (remote); \
1975  struct m0_mutex *_m = &_r->rem_resource->r_mutex; \
1976  m0_mutex_lock(_m); \
1977  _c = m0_ref_read(&_r->rem_refcnt); \
1978  M0_LOG(M0_DEBUG, "rm_remote=%p ref: %d -> %d", _r, _c, _c - 1); \
1979  m0_ref_put(&_r->rem_refcnt); \
1980  m0_mutex_unlock(_m); \
1981 })
1982 
1993 M0_INTERNAL void m0_rm_credit_get(struct m0_rm_incoming *in);
1994 
2001 M0_INTERNAL void m0_rm_credit_put(struct m0_rm_incoming *in);
2002 
2006 M0_INTERNAL int m0_rm_credit_encode(struct m0_rm_credit *credit,
2007  struct m0_buf *buf);
2008 
2012 M0_INTERNAL int m0_rm_credit_decode(struct m0_rm_credit *credit,
2013  struct m0_buf *buf);
2014 
2015 
2029 M0_INTERNAL int m0_rm_net_locate(struct m0_rm_credit *credit,
2030  struct m0_rm_remote *other);
2031 
2048 M0_INTERNAL void m0_rm_remote_owner_set(struct m0_rm_remote *rem, uint64_t id);
2049 
2052 /* __MOTR_RM_RM_H__ */
2053 #endif
2054 
2055 /*
2056  * Local variables:
2057  * c-indentation-style: "K&R"
2058  * c-basic-offset: 8
2059  * tab-width: 8
2060  * fill-column: 80
2061  * scroll-step: 1
2062  * End:
2063  */
const struct m0_rm_credit_ops * cr_ops
Definition: rm.h:502
M0_INTERNAL int m0_rm_owner_selfadd(struct m0_rm_owner *owner, struct m0_rm_credit *r)
Definition: rm.c:732
Definition: rm.h:886
uint64_t id
Definition: cob.h:2380
struct m0_rm_resource * rem_resource
Definition: rm.h:752
struct m0_rm_resource_type * r_type
Definition: rm.h:304
void(* rio_conflict)(struct m0_rm_incoming *in)
Definition: rm.h:1498
int32_t rog_rc
Definition: rm.h:1548
bool(* rto_is)(const struct m0_rm_resource *resource, uint64_t id)
Definition: rm.h:459
Definition: rm.h:263
enum m0_rm_remote_state rem_state
Definition: rm.h:748
m0_time_t rin_req_time
Definition: rm.h:1473
int const char const void size_t int flags
Definition: dir.c:328
uint64_t cr_datum
Definition: rm.h:514
struct m0_tlink rem_res_linkage
Definition: rm.h:762
uint64_t rog_magix
Definition: rm.h:1553
enum m0_rm_incoming_type rin_type
Definition: rm.h:1435
static struct m0_bufvec dst
Definition: xform.c:61
bool(* cro_intersects)(const struct m0_rm_credit *self, const struct m0_rm_credit *c1)
Definition: rm.h:579
struct m0_clink rem_rev_sess_clink
Definition: rm.h:754
static struct m0_rm_remote creditor
Definition: file.c:95
struct m0_rm_remote * ro_creditor
Definition: rm.h:1026
static struct buffer * cur(struct m0_addb2_mach *mach, m0_bcount_t space)
Definition: addb2.c:791
void(* rio_complete)(struct m0_rm_incoming *in, int32_t rc)
Definition: rm.h:1493
M0_INTERNAL int m0_rm_credit_decode(struct m0_rm_credit *credit, struct m0_buf *buf)
Definition: rm.c:3376
M0_INTERNAL struct m0_rm_resource_type * m0_rm_resource_type_lookup(const struct m0_rm_domain *dom, const uint64_t rtype_id)
Definition: rm.c:327
m0_rm_owner_owned_state
Definition: rm.h:880
struct m0_fid rrp_owner
Definition: rm.h:1255
const struct m0_uint128 m0_rm_group
Definition: io.c:53
uint64_t m0_time_t
Definition: time.h:37
struct m0_cookie rl_cookie
Definition: rm.h:1110
enum m0_rm_incoming_policy rin_policy
Definition: rm.h:1447
M0_INTERNAL int m0_rm_credit_dup(const struct m0_rm_credit *src_credit, struct m0_rm_credit **dest_credit)
Definition: rm.c:3308
struct m0_rm_ha_tracker rem_tracker
Definition: rm.h:784
m0_rm_outgoing_type
Definition: rm.h:1504
bool(* cro_conflicts)(const struct m0_rm_credit *self, const struct m0_rm_credit *c1)
Definition: rm.h:618
struct m0_rm_incoming * rp_incoming
Definition: rm.h:1679
bool(* rto_eq)(const struct m0_rm_resource *resource0, const struct m0_rm_resource *resource1)
Definition: rm.h:454
Definition: rm.h:1149
uint64_t rem_magix
Definition: rm.h:789
m0_bcount_t(* rto_len)(const struct m0_rm_resource *resource)
Definition: rm.h:464
struct m0_queue rt_ha_events
Definition: rm.h:447
m0_time_t rrp_time
Definition: rm.h:1251
struct m0_rm_resource_type * rd_types[M0_RM_RESOURCE_TYPE_ID_MAX]
Definition: rm.h:286
M0_INTERNAL void m0_rm_domain_init(struct m0_rm_domain *dom)
Definition: rm.c:215
m0_rm_owner_state
Definition: rm.h:810
M0_INTERNAL void m0_rm_remote_init(struct m0_rm_remote *rem, struct m0_rm_resource *res)
Definition: rm.c:1411
uint64_t m0_bcount_t
Definition: types.h:77
uint64_t ro_id
Definition: rm.h:1066
struct m0_tlink ro_owner_linkage
Definition: rm.h:1062
Definition: queue.h:43
struct m0_rm_credit rin_want
Definition: rm.h:1450
struct m0_tlink r_linkage
Definition: rm.h:310
struct m0_rpc_session * rem_session
Definition: rm.h:755
Definition: rm.h:1137
int(* cro_copy)(struct m0_rm_credit *dst, const struct m0_rm_credit *self)
Definition: rm.h:666
struct m0_rm_domain * rt_dom
Definition: rm.h:428
void(* cro_free)(struct m0_rm_credit *self)
Definition: rm.h:537
M0_INTERNAL int m0_rm_credit_encode(struct m0_rm_credit *credit, struct m0_buf *buf)
Definition: rm.c:3350
struct m0_rm_owner * cr_owner
Definition: rm.h:501
Definition: sock.c:887
M0_INTERNAL int m0_rm_owner_timedwait(struct m0_rm_owner *owner, uint64_t state, const m0_time_t abs_timeout)
Definition: rm.c:892
m0_rm_remote_state
Definition: rm.h:675
struct m0_mutex r_mutex
Definition: rm.h:319
uint32_t r_ref
Definition: rm.h:330
struct m0_fid fid
Definition: di.c:46
uint64_t cr_magix
Definition: rm.h:525
uint64_t rrp_seq
Definition: rm.h:1265
const struct m0_rm_resource_ops * r_ops
Definition: rm.h:305
m0_rm_incoming_flags
Definition: rm.h:1183
Definition: buf.h:37
M0_INTERNAL int m0_rm_resource_encode(struct m0_rm_resource *res, struct m0_buf *buf)
Definition: rm.c:393
struct m0_rm_credit rl_credit
Definition: rm.h:1099
uint64_t rem_id
Definition: rm.h:782
M0_INTERNAL void m0_rm_remote_owner_set(struct m0_rm_remote *rem, uint64_t id)
uint64_t rl_magix
Definition: rm.h:1112
struct m0_sm rin_sm
Definition: rm.h:1436
struct m0_tl r_local
Definition: rm.h:323
m0_res_type_id
Definition: rm.h:371
bool ro_user_windup
Definition: rm.h:1071
struct m0_sm ro_sm
Definition: rm.h:1005
m0_rm_pin_flags
Definition: rm.h:1556
Definition: rm.h:917
struct m0_rm_credit * rp_credit
Definition: rm.h:1677
struct m0_tl ro_borrowed
Definition: rm.h:1033
bool(* cro_is_subset)(const struct m0_rm_credit *self, const struct m0_rm_credit *c1)
Definition: rm.h:584
M0_INTERNAL void m0_rm_incoming_init(struct m0_rm_incoming *in, struct m0_rm_owner *owner, enum m0_rm_incoming_type type, enum m0_rm_incoming_policy policy, uint64_t flags)
Definition: rm.c:1060
uint32_t rt_nr_resources
Definition: rm.h:415
m0_rm_incoming_state
Definition: rm.h:1134
Definition: refs.h:34
struct m0_tl cr_pins
Definition: rm.h:524
struct m0_tl ro_incoming[M0_RM_REQUEST_PRIORITY_NR][OQS_NR]
Definition: rm.h:1054
struct m0_chan rem_signal
Definition: rm.h:757
const struct m0_uint128 m0_rm_no_group
Definition: rm.c:211
Definition: rm.h:828
Definition: rm.h:1176
void(* rop_policy)(struct m0_rm_resource *resource, struct m0_rm_incoming *in)
Definition: rm.h:359
M0_INTERNAL void m0_rm_owner_fini(struct m0_rm_owner *owner)
Definition: rm.c:943
M0_INTERNAL void m0_rm_owner_init_rfid(struct m0_rm_owner *owner, const struct m0_uint128 *group, struct m0_rm_resource *res, struct m0_rm_remote *creditor)
Definition: rm.c:649
Definition: tlist.h:251
struct m0_tl ro_outgoing[OQS_NR]
Definition: rm.h:1058
M0_INTERNAL int m0_rm_credit_copy(struct m0_rm_credit *dst, const struct m0_rm_credit *src)
Definition: rm.c:3333
struct m0_tl ro_sublet
Definition: rm.h:1042
const struct m0_rm_incoming_ops * rin_ops
Definition: rm.h:1471
int32_t rin_rc
Definition: rm.h:1446
static struct m0_stob_domain * dom
Definition: storage.c:38
static struct rectype rt[]
Definition: beck.c:428
m0_rm_owner_queue_state
Definition: rm.h:899
void(* rop_resource_free)(struct m0_rm_resource *resource)
Definition: rm.h:368
M0_INTERNAL void m0_rm_resource_initial_credit(const struct m0_rm_resource *resource, struct m0_rm_credit *credit)
void(* rop_credit_init)(struct m0_rm_resource *resource, struct m0_rm_credit *credit)
Definition: rm.h:365
struct m0_thread rt_worker
Definition: rm.h:420
uint64_t r_magix
Definition: rm.h:331
Definition: chan.h:229
static void group(void)
Definition: sm.c:386
int(* rto_decode)(struct m0_bufvec_cursor *cur, struct m0_rm_resource **resource)
Definition: rm.h:468
struct m0_rm_remote * rl_other
Definition: rm.h:1105
M0_INTERNAL int m0_rm_net_locate(struct m0_rm_credit *credit, struct m0_rm_remote *other)
Definition: rm.c:3487
struct m0_mutex rt_lock
Definition: rm.h:404
Definition: rm.h:1145
struct m0_rm_remote * rin_remote
Definition: rm.h:1477
Definition: rm.h:893
uint64_t rin_magix
Definition: rm.h:1478
M0_INTERNAL void m0_rm_resource_free(struct m0_rm_resource *res)
Definition: rm.c:386
m0_rm_incoming_policy
Definition: rm.h:1155
int(* cro_disjoin)(struct m0_rm_credit *self, const struct m0_rm_credit *c1, struct m0_rm_credit *intersection)
Definition: rm.h:597
Definition: rm.h:676
m0_time_t cr_get_time
Definition: rm.h:510
uint64_t rp_magix
Definition: rm.h:1690
const char * rt_name
Definition: rm.h:389
M0_INTERNAL void m0_rm_credit_put(struct m0_rm_incoming *in)
Definition: rm.c:1797
M0_INTERNAL void m0_rm_resource_add(struct m0_rm_resource_type *rtype, struct m0_rm_resource *res)
Definition: rm.c:337
int(* rto_encode)(struct m0_bufvec_cursor *cur, const struct m0_rm_resource *resource)
Definition: rm.h:473
Definition: fid.h:38
M0_INTERNAL void m0_rm_credit_init(struct m0_rm_credit *credit, struct m0_rm_owner *owner)
Definition: rm.c:964
M0_INTERNAL void m0_rm_remote_fini(struct m0_rm_remote *rem)
Definition: rm.c:1431
uint64_t ro_magix
Definition: rm.h:1078
struct m0_tlink rp_credit_linkage
Definition: rm.h:1684
static int r[NR]
Definition: thread.c:46
struct m0_tlink cr_linkage
Definition: rm.h:519
uint64_t rin_flags
Definition: rm.h:1448
Definition: rm.h:863
M0_INTERNAL void m0_rm_owner_windup(struct m0_rm_owner *owner)
Definition: rm.c:930
uint32_t rp_flags
Definition: rm.h:1676
Definition: sm.h:301
struct m0_tl ro_owned[OWOS_NR]
Definition: rm.h:1047
m0_rm_incoming_type
Definition: rm.h:247
int(* cro_diff)(struct m0_rm_credit *self, const struct m0_rm_credit *c1)
Definition: rm.h:660
m0_bcount_t(* cro_len)(const struct m0_rm_credit *self)
Definition: rm.h:551
M0_INTERNAL void m0_rm_incoming_fini(struct m0_rm_incoming *in)
Definition: rm.c:1099
const struct m0_rm_resource_type_ops * rt_ops
Definition: rm.h:388
M0_INTERNAL void m0_rm_owner_unlock(struct m0_rm_owner *owner)
Definition: rm.c:603
M0_INTERNAL int m0_rm_type_register(struct m0_rm_domain *dom, struct m0_rm_resource_type *rt)
Definition: rm.c:252
struct m0_fid ro_fid
Definition: rm.h:1011
int rin_priority
Definition: rm.h:1470
M0_INTERNAL void m0_rm_owner_creditor_reset(struct m0_rm_owner *owner, struct m0_rm_remote *creditor)
Definition: rm.c:904
void(* cro_initial_capital)(struct m0_rm_credit *self)
Definition: rm.h:671
struct m0_ref rem_refcnt
Definition: rm.h:781
struct m0_tl rin_pins
Definition: rm.h:1466
struct m0_mutex rd_lock
Definition: rm.h:287
Definition: rm.h:1175
struct m0_cookie rem_cookie
Definition: rm.h:768
Definition: rm.h:1171
int type
Definition: dir.c:1031
M0_INTERNAL void m0_rm_owner_lock(struct m0_rm_owner *owner)
Definition: rm.c:592
uint64_t rl_id
Definition: rm.h:1111
struct m0_uint128 cr_group_id
Definition: rm.h:506
M0_INTERNAL void m0_rm_type_deregister(struct m0_rm_resource_type *rt)
Definition: rm.c:288
M0_INTERNAL void m0_rm_credit_fini(struct m0_rm_credit *credit)
Definition: rm.c:985
struct m0_uint128 ro_group_id
Definition: rm.h:1022
bool rt_stop_worker
Definition: rm.h:424
M0_INTERNAL void m0_rm_owner_init(struct m0_rm_owner *owner, struct m0_fid *fid, const struct m0_uint128 *group, struct m0_rm_resource *res, struct m0_rm_remote *creditor)
Definition: rm.c:609
Definition: mutex.h:47
struct m0_sm_group rt_sm_grp
Definition: rm.h:416
int(* cro_decode)(struct m0_rm_credit *self, struct m0_bufvec_cursor *cur)
Definition: rm.h:546
struct m0_mutex rt_queue_guard
Definition: rm.h:430
struct m0_pdclust_src_addr src
Definition: fd.c:108
struct m0_rm_reserve_prio rin_reserve
Definition: rm.h:1475
enum m0_rm_outgoing_type rog_type
Definition: rm.h:1544
int32_t rc
Definition: trigger_fop.h:47
Definition: rm.h:1675
uint64_t rt_id
Definition: rm.h:403
M0_INTERNAL void m0_rm_domain_fini(struct m0_rm_domain *dom)
Definition: rm.c:227
bool rog_sent
Definition: rm.h:1552
M0_INTERNAL void m0_rm_resource_del(struct m0_rm_resource *res)
Definition: rm.c:361
struct m0_rm_loan rog_want
Definition: rm.h:1550
Definition: rm.h:903
uint64_t ro_seq
Definition: rm.h:1077
int(* cro_encode)(struct m0_rm_credit *self, struct m0_bufvec_cursor *cur)
Definition: rm.h:541
M0_INTERNAL void m0_rm_credit_get(struct m0_rm_incoming *in)
Definition: rm.c:1758
struct m0_rm_resource * ro_resource
Definition: rm.h:1015
struct m0_tl r_remotes
Definition: rm.h:315
struct m0_tl rt_resources
Definition: rm.h:409
int(* rop_credit_decode)(struct m0_rm_resource *resource, struct m0_rm_credit *credit, struct m0_bufvec_cursor *cur)
Definition: rm.h:340
M0_INTERNAL struct m0_rm_resource * m0_rm_resource_find(const struct m0_rm_resource_type *rt, const struct m0_rm_resource *res)
Definition: rm.c:243
Definition: rm.h:1156
int(* cro_join)(struct m0_rm_credit *self, const struct m0_rm_credit *c1)
Definition: rm.h:590
struct m0_tlink rp_incoming_linkage
Definition: rm.h:1689
bool rem_dead
Definition: rm.h:788