]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | #ifndef CEPH_MDS_LOCKS_H |
2 | #define CEPH_MDS_LOCKS_H | |
92f5a8d4 | 3 | #include <stdbool.h> |
7c673cae FG |
4 | |
5 | struct sm_state_t { | |
6 | int next; // 0 if stable | |
92f5a8d4 | 7 | bool loner; |
7c673cae FG |
8 | int replica_state; |
9 | char can_read; | |
10 | char can_read_projected; | |
11 | char can_rdlock; | |
12 | char can_wrlock; | |
13 | char can_force_wrlock; | |
14 | char can_lease; | |
15 | char can_xlock; | |
16 | int caps; | |
17 | int loner_caps; | |
18 | int xlocker_caps; | |
19 | int replica_caps; | |
20 | }; | |
21 | ||
22 | struct sm_t { | |
23 | const struct sm_state_t *states; | |
24 | int allowed_ever_auth; | |
25 | int allowed_ever_replica; | |
26 | int careful; | |
27 | int can_remote_xlock; | |
28 | }; | |
29 | ||
30 | #define ANY 1 // auth or replica | |
31 | #define AUTH 2 // auth only | |
32 | #define XCL 3 // auth or exclusive client | |
33 | //#define FW 4 // fw to auth, if replica | |
34 | #define REQ 5 // req state change from auth, if replica | |
35 | ||
36 | extern const struct sm_t sm_simplelock; | |
37 | extern const struct sm_t sm_filelock; | |
38 | extern const struct sm_t sm_scatterlock; | |
39 | extern const struct sm_t sm_locallock; | |
40 | ||
41 | ||
42 | ||
43 | // -- lock states -- | |
44 | // sync <-> lock | |
45 | enum { | |
46 | LOCK_UNDEF = 0, | |
47 | ||
48 | // auth rep | |
49 | LOCK_SYNC, // AR R . RD L . / C . R RD L . / C . | |
50 | LOCK_LOCK, // AR R . .. . X / . . . .. . . / . . | |
51 | ||
52 | LOCK_PREXLOCK, // A . . .. . . / . . (lock) | |
53 | LOCK_XLOCK, // A . . .. . . / . . (lock) | |
54 | LOCK_XLOCKDONE, // A r p rd l x / . . (lock) <-- by same client only!! | |
55 | LOCK_XLOCKSNAP, // also revoke Fb | |
56 | LOCK_LOCK_XLOCK, | |
57 | ||
58 | LOCK_SYNC_LOCK, // AR R . .. . . / . . R .. . . / . . | |
59 | LOCK_LOCK_SYNC, // A R p rd l . / . . (lock) <-- lc by same client only | |
60 | ||
61 | LOCK_EXCL, // A . . .. . . / c x * (lock) | |
62 | LOCK_EXCL_SYNC, // A . . .. . . / c . * (lock) | |
63 | LOCK_EXCL_LOCK, // A . . .. . . / . . (lock) | |
64 | LOCK_SYNC_EXCL, // Ar R . .. . . / c . * (sync->lock) | |
65 | LOCK_LOCK_EXCL, // A R . .. . . / . . (lock) | |
66 | ||
67 | LOCK_REMOTEXLOCK, // on NON-auth | |
68 | ||
69 | // * = loner mode | |
70 | ||
71 | LOCK_MIX, | |
72 | LOCK_SYNC_MIX, | |
73 | LOCK_SYNC_MIX2, | |
74 | LOCK_LOCK_MIX, | |
75 | LOCK_EXCL_MIX, | |
76 | LOCK_MIX_SYNC, | |
77 | LOCK_MIX_SYNC2, | |
78 | LOCK_MIX_LOCK, | |
79 | LOCK_MIX_LOCK2, | |
80 | LOCK_MIX_EXCL, | |
81 | ||
82 | LOCK_TSYN, | |
83 | LOCK_TSYN_LOCK, | |
84 | LOCK_TSYN_MIX, | |
85 | LOCK_LOCK_TSYN, | |
86 | LOCK_MIX_TSYN, | |
87 | ||
88 | LOCK_PRE_SCAN, | |
89 | LOCK_SCAN, | |
90 | ||
91 | LOCK_SNAP_SYNC, | |
92 | ||
93 | LOCK_XSYN, | |
94 | LOCK_XSYN_EXCL, | |
95 | LOCK_EXCL_XSYN, | |
96 | LOCK_XSYN_SYNC, | |
b32b8144 FG |
97 | LOCK_XSYN_LOCK, |
98 | LOCK_XSYN_MIX, | |
7c673cae FG |
99 | |
100 | LOCK_MAX, | |
101 | }; | |
102 | ||
103 | // ------------------------- | |
104 | // lock actions | |
105 | ||
106 | // for replicas | |
107 | #define LOCK_AC_SYNC -1 | |
108 | #define LOCK_AC_MIX -2 | |
109 | #define LOCK_AC_LOCK -3 | |
110 | #define LOCK_AC_LOCKFLUSHED -4 | |
111 | ||
112 | // for auth | |
113 | #define LOCK_AC_SYNCACK 1 | |
114 | #define LOCK_AC_MIXACK 2 | |
115 | #define LOCK_AC_LOCKACK 3 | |
116 | ||
117 | #define LOCK_AC_REQSCATTER 7 | |
118 | #define LOCK_AC_REQUNSCATTER 8 | |
119 | #define LOCK_AC_NUDGE 9 | |
120 | #define LOCK_AC_REQRDLOCK 10 | |
121 | ||
122 | #define LOCK_AC_FOR_REPLICA(a) ((a) < 0) | |
123 | #define LOCK_AC_FOR_AUTH(a) ((a) > 0) | |
124 | ||
125 | ||
7c673cae | 126 | #endif |