Whamcloud - gitweb
93906ea27c0292b3a4702ff615de5b5d16094910
[doc/protocol.git] / ldlm.txt
1 The Lustre Distributed Lock Manager
2 -----------------------------------
3 [[ldlm]]
4
5 The discussion of the LDLM is deferred for now. We'll get into it soon
6 enough.
7
8 LDLM Structures
9 ~~~~~~~~~~~~~~~
10
11 Lock Modes
12 ^^^^^^^^^^
13
14 ----
15 typedef enum {
16         LCK_MINMODE = 0,
17         LCK_EX      = 1,
18         LCK_PW      = 2,
19         LCK_PR      = 4,
20         LCK_CW      = 8,
21         LCK_CR      = 16,
22         LCK_NL      = 32,
23         LCK_GROUP   = 64,
24         LCK_COS     = 128,
25         LCK_MAXMODE
26 } ldlm_mode_t;
27 ----
28
29 LDLM Extent
30 ^^^^^^^^^^^
31
32 ----
33 struct ldlm_extent {
34         __u64 start;
35         __u64 end;
36         __u64 gid;
37 };
38 ----
39
40 LDLM Flock Wire
41 ^^^^^^^^^^^^^^^
42
43 ----
44 struct ldlm_flock_wire {
45         __u64 lfw_start;
46         __u64 lfw_end;
47         __u64 lfw_owner;
48         __u32 lfw_padding;
49         __u32 lfw_pid;
50 };
51 ----
52
53 LDLM Inode Bits
54 ^^^^^^^^^^^^^^^
55
56 ----
57 struct ldlm_inodebits {
58         __u64 bits;
59 };
60 ----
61
62 LDLM Wire Policy Data
63 ^^^^^^^^^^^^^^^^^^^^^
64
65 ----
66 typedef union {
67         struct ldlm_extent l_extent;
68         struct ldlm_flock_wire l_flock;
69         struct ldlm_inodebits l_inodebits;
70 } ldlm_wire_policy_data_t;
71 ----
72
73 Resource Descriptor
74 ^^^^^^^^^^^^^^^^^^^
75
76 ----
77 struct ldlm_resource_desc {
78         ldlm_type_t lr_type;
79         __u32 lr_padding;       /* also fix lustre_swab_ldlm_resource_desc */
80         struct ldlm_res_id lr_name;
81 };
82 ----
83
84 The 'ldlm_type_t' is given by one of these values:
85 ----
86 typedef enum {
87         LDLM_PLAIN     = 10,
88         LDLM_EXTENT    = 11,
89         LDLM_FLOCK     = 12,
90         LDLM_IBITS     = 13
91 } ldlm_type_t;
92 ----
93
94 Lock Descriptor
95 ^^^^^^^^^^^^^^^
96
97 ----
98 struct ldlm_lock_desc {
99         struct ldlm_resource_desc l_resource;
100         ldlm_mode_t l_req_mode;
101         ldlm_mode_t l_granted_mode;
102         ldlm_wire_policy_data_t l_policy_data;
103 };
104 ----
105
106 Lock Request
107 ^^^^^^^^^^^^
108
109 ----
110 #define LDLM_LOCKREQ_HANDLES 2
111 struct ldlm_request {
112         __u32 lock_flags;
113         __u32 lock_count;
114         struct ldlm_lock_desc lock_desc;
115         struct lustre_handle lock_handle[LDLM_LOCKREQ_HANDLES];
116 };
117 ----
118
119 Lock Reply
120 ^^^^^^^^^^
121
122 ----
123 struct ldlm_reply {
124         __u32 lock_flags;
125         __u32 lock_padding;     /* also fix lustre_swab_ldlm_reply */
126         struct ldlm_lock_desc lock_desc;
127         struct lustre_handle lock_handle;
128         __u64  lock_policy_res1;
129         __u64  lock_policy_res2;
130 };
131 ----
132
133 Lock Value Block
134 ^^^^^^^^^^^^^^^^
135
136 A lock value block is part of reply messages from servers when an
137 LDLM_ENQUEUE command has been issued. There are two varieties. Which
138 is chosen depends on the target.
139
140 ----
141 struct ost_lvb_v1 {
142     __u64        lvb_size;
143     obd_time     lvb_mtime;
144     obd_time     lvb_atime;
145     obd_time     lvb_ctime;
146     __u64        lvb_blocks;
147 };
148 struct ost_lvb {
149     __u64        lvb_size;
150     obd_time     lvb_mtime;
151     obd_time     lvb_atime;
152     obd_time     lvb_ctime;
153     __u64        lvb_blocks;
154     __u32        lvb_mtime_ns;
155     __u32        lvb_atime_ns;
156     __u32        lvb_ctime_ns;
157     __u32        lvb_padding;
158 };
159 ----