1#ifndef CEPH_RADOS_H
2#define CEPH_RADOS_H
3
4
5
6
7
8
9#include <linux/ceph/msgr.h>
10
11
12
13
14struct ceph_fsid {
15 unsigned char fsid[16];
16};
17
18static inline int ceph_fsid_compare(const struct ceph_fsid *a,
19 const struct ceph_fsid *b)
20{
21 return memcmp(a, b, sizeof(*a));
22}
23
24
25
26
27typedef __le64 ceph_snapid_t;
28#define CEPH_SNAPDIR ((__u64)(-1))
29#define CEPH_NOSNAP ((__u64)(-2))
30#define CEPH_MAXSNAP ((__u64)(-3))
31
32struct ceph_timespec {
33 __le32 tv_sec;
34 __le32 tv_nsec;
35} __attribute__ ((packed));
36
37
38
39
40
41#define CEPH_OBJECT_LAYOUT_HASH 1
42#define CEPH_OBJECT_LAYOUT_LINEAR 2
43#define CEPH_OBJECT_LAYOUT_HASHINO 3
44
45
46
47
48#define CEPH_PG_LAYOUT_CRUSH 0
49#define CEPH_PG_LAYOUT_HASH 1
50#define CEPH_PG_LAYOUT_LINEAR 2
51#define CEPH_PG_LAYOUT_HYBRID 3
52
53#define CEPH_PG_MAX_SIZE 16
54
55
56
57
58
59struct ceph_pg_v1 {
60 __le16 preferred;
61 __le16 ps;
62 __le32 pool;
63} __attribute__ ((packed));
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82#define CEPH_NOPOOL ((__u64) (-1))
83
84#define CEPH_PG_TYPE_REP 1
85#define CEPH_PG_TYPE_RAID4 2
86
87
88
89
90
91
92
93
94
95
96static inline int ceph_stable_mod(int x, int b, int bmask)
97{
98 if ((x & bmask) < b)
99 return x & bmask;
100 else
101 return x & (bmask >> 1);
102}
103
104
105
106
107struct ceph_object_layout {
108 struct ceph_pg_v1 ol_pgid;
109 __le32 ol_stripe_unit;
110} __attribute__ ((packed));
111
112
113
114
115struct ceph_eversion {
116 __le32 epoch;
117 __le64 version;
118} __attribute__ ((packed));
119
120
121
122
123
124
125#define CEPH_OSD_EXISTS (1<<0)
126#define CEPH_OSD_UP (1<<1)
127#define CEPH_OSD_AUTOOUT (1<<2)
128#define CEPH_OSD_NEW (1<<3)
129
130extern const char *ceph_osd_state_name(int s);
131
132
133#define CEPH_OSD_IN 0x10000
134#define CEPH_OSD_OUT 0
135
136
137
138
139
140#define CEPH_OSDMAP_NEARFULL (1<<0)
141#define CEPH_OSDMAP_FULL (1<<1)
142#define CEPH_OSDMAP_PAUSERD (1<<2)
143#define CEPH_OSDMAP_PAUSEWR (1<<3)
144#define CEPH_OSDMAP_PAUSEREC (1<<4)
145#define CEPH_OSDMAP_NOUP (1<<5)
146#define CEPH_OSDMAP_NODOWN (1<<6)
147#define CEPH_OSDMAP_NOOUT (1<<7)
148#define CEPH_OSDMAP_NOIN (1<<8)
149#define CEPH_OSDMAP_NOBACKFILL (1<<9)
150#define CEPH_OSDMAP_NORECOVER (1<<10)
151
152
153
154
155
156#define OSD_WRITETOOBIG EMSGSIZE
157
158
159
160
161
162
163
164
165#define CEPH_OSD_OP_MODE 0xf000
166#define CEPH_OSD_OP_MODE_RD 0x1000
167#define CEPH_OSD_OP_MODE_WR 0x2000
168#define CEPH_OSD_OP_MODE_RMW 0x3000
169#define CEPH_OSD_OP_MODE_SUB 0x4000
170
171#define CEPH_OSD_OP_TYPE 0x0f00
172#define CEPH_OSD_OP_TYPE_LOCK 0x0100
173#define CEPH_OSD_OP_TYPE_DATA 0x0200
174#define CEPH_OSD_OP_TYPE_ATTR 0x0300
175#define CEPH_OSD_OP_TYPE_EXEC 0x0400
176#define CEPH_OSD_OP_TYPE_PG 0x0500
177#define CEPH_OSD_OP_TYPE_MULTI 0x0600
178
179enum {
180
181
182 CEPH_OSD_OP_READ = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 1,
183 CEPH_OSD_OP_STAT = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 2,
184 CEPH_OSD_OP_MAPEXT = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 3,
185
186
187 CEPH_OSD_OP_MASKTRUNC = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 4,
188 CEPH_OSD_OP_SPARSE_READ = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 5,
189
190 CEPH_OSD_OP_NOTIFY = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 6,
191 CEPH_OSD_OP_NOTIFY_ACK = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 7,
192
193
194 CEPH_OSD_OP_ASSERT_VER = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 8,
195
196
197 CEPH_OSD_OP_WRITE = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 1,
198 CEPH_OSD_OP_WRITEFULL = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 2,
199 CEPH_OSD_OP_TRUNCATE = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 3,
200 CEPH_OSD_OP_ZERO = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 4,
201 CEPH_OSD_OP_DELETE = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 5,
202
203
204 CEPH_OSD_OP_APPEND = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 6,
205 CEPH_OSD_OP_STARTSYNC = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 7,
206 CEPH_OSD_OP_SETTRUNC = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 8,
207 CEPH_OSD_OP_TRIMTRUNC = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 9,
208
209 CEPH_OSD_OP_TMAPUP = CEPH_OSD_OP_MODE_RMW | CEPH_OSD_OP_TYPE_DATA | 10,
210 CEPH_OSD_OP_TMAPPUT = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 11,
211 CEPH_OSD_OP_TMAPGET = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 12,
212
213 CEPH_OSD_OP_CREATE = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 13,
214 CEPH_OSD_OP_ROLLBACK= CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 14,
215
216 CEPH_OSD_OP_WATCH = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 15,
217
218
219 CEPH_OSD_OP_OMAPGETKEYS = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 17,
220 CEPH_OSD_OP_OMAPGETVALS = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 18,
221 CEPH_OSD_OP_OMAPGETHEADER = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 19,
222 CEPH_OSD_OP_OMAPGETVALSBYKEYS =
223 CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 20,
224 CEPH_OSD_OP_OMAPSETVALS = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 21,
225 CEPH_OSD_OP_OMAPSETHEADER = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 22,
226 CEPH_OSD_OP_OMAPCLEAR = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 23,
227 CEPH_OSD_OP_OMAPRMKEYS = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 24,
228 CEPH_OSD_OP_OMAP_CMP = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 25,
229
230
231 CEPH_OSD_OP_CLONERANGE = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_MULTI | 1,
232 CEPH_OSD_OP_ASSERT_SRC_VERSION = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_MULTI | 2,
233 CEPH_OSD_OP_SRC_CMPXATTR = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_MULTI | 3,
234
235
236
237 CEPH_OSD_OP_GETXATTR = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_ATTR | 1,
238 CEPH_OSD_OP_GETXATTRS = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_ATTR | 2,
239 CEPH_OSD_OP_CMPXATTR = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_ATTR | 3,
240
241
242 CEPH_OSD_OP_SETXATTR = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_ATTR | 1,
243 CEPH_OSD_OP_SETXATTRS = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_ATTR | 2,
244 CEPH_OSD_OP_RESETXATTRS = CEPH_OSD_OP_MODE_WR|CEPH_OSD_OP_TYPE_ATTR | 3,
245 CEPH_OSD_OP_RMXATTR = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_ATTR | 4,
246
247
248 CEPH_OSD_OP_PULL = CEPH_OSD_OP_MODE_SUB | 1,
249 CEPH_OSD_OP_PUSH = CEPH_OSD_OP_MODE_SUB | 2,
250 CEPH_OSD_OP_BALANCEREADS = CEPH_OSD_OP_MODE_SUB | 3,
251 CEPH_OSD_OP_UNBALANCEREADS = CEPH_OSD_OP_MODE_SUB | 4,
252 CEPH_OSD_OP_SCRUB = CEPH_OSD_OP_MODE_SUB | 5,
253 CEPH_OSD_OP_SCRUB_RESERVE = CEPH_OSD_OP_MODE_SUB | 6,
254 CEPH_OSD_OP_SCRUB_UNRESERVE = CEPH_OSD_OP_MODE_SUB | 7,
255 CEPH_OSD_OP_SCRUB_STOP = CEPH_OSD_OP_MODE_SUB | 8,
256 CEPH_OSD_OP_SCRUB_MAP = CEPH_OSD_OP_MODE_SUB | 9,
257
258
259 CEPH_OSD_OP_WRLOCK = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_LOCK | 1,
260 CEPH_OSD_OP_WRUNLOCK = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_LOCK | 2,
261 CEPH_OSD_OP_RDLOCK = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_LOCK | 3,
262 CEPH_OSD_OP_RDUNLOCK = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_LOCK | 4,
263 CEPH_OSD_OP_UPLOCK = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_LOCK | 5,
264 CEPH_OSD_OP_DNLOCK = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_LOCK | 6,
265
266
267
268 CEPH_OSD_OP_CALL = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_EXEC | 1,
269
270
271 CEPH_OSD_OP_PGLS = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_PG | 1,
272 CEPH_OSD_OP_PGLS_FILTER = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_PG | 2,
273};
274
275static inline int ceph_osd_op_type_lock(int op)
276{
277 return (op & CEPH_OSD_OP_TYPE) == CEPH_OSD_OP_TYPE_LOCK;
278}
279static inline int ceph_osd_op_type_data(int op)
280{
281 return (op & CEPH_OSD_OP_TYPE) == CEPH_OSD_OP_TYPE_DATA;
282}
283static inline int ceph_osd_op_type_attr(int op)
284{
285 return (op & CEPH_OSD_OP_TYPE) == CEPH_OSD_OP_TYPE_ATTR;
286}
287static inline int ceph_osd_op_type_exec(int op)
288{
289 return (op & CEPH_OSD_OP_TYPE) == CEPH_OSD_OP_TYPE_EXEC;
290}
291static inline int ceph_osd_op_type_pg(int op)
292{
293 return (op & CEPH_OSD_OP_TYPE) == CEPH_OSD_OP_TYPE_PG;
294}
295static inline int ceph_osd_op_type_multi(int op)
296{
297 return (op & CEPH_OSD_OP_TYPE) == CEPH_OSD_OP_TYPE_MULTI;
298}
299
300static inline int ceph_osd_op_mode_subop(int op)
301{
302 return (op & CEPH_OSD_OP_MODE) == CEPH_OSD_OP_MODE_SUB;
303}
304static inline int ceph_osd_op_mode_read(int op)
305{
306 return (op & CEPH_OSD_OP_MODE_RD) &&
307 op != CEPH_OSD_OP_CALL;
308}
309static inline int ceph_osd_op_mode_modify(int op)
310{
311 return op & CEPH_OSD_OP_MODE_WR;
312}
313
314
315
316
317
318#define CEPH_OSD_TMAP_HDR 'h'
319#define CEPH_OSD_TMAP_SET 's'
320#define CEPH_OSD_TMAP_CREATE 'c'
321#define CEPH_OSD_TMAP_RM 'r'
322#define CEPH_OSD_TMAP_RMSLOPPY 'R'
323
324extern const char *ceph_osd_op_name(int op);
325
326
327
328
329
330
331enum {
332 CEPH_OSD_FLAG_ACK = 0x0001,
333 CEPH_OSD_FLAG_ONNVRAM = 0x0002,
334 CEPH_OSD_FLAG_ONDISK = 0x0004,
335 CEPH_OSD_FLAG_RETRY = 0x0008,
336 CEPH_OSD_FLAG_READ = 0x0010,
337 CEPH_OSD_FLAG_WRITE = 0x0020,
338 CEPH_OSD_FLAG_ORDERSNAP = 0x0040,
339 CEPH_OSD_FLAG_PEERSTAT_OLD = 0x0080,
340 CEPH_OSD_FLAG_BALANCE_READS = 0x0100,
341 CEPH_OSD_FLAG_PARALLELEXEC = 0x0200,
342 CEPH_OSD_FLAG_PGOP = 0x0400,
343 CEPH_OSD_FLAG_EXEC = 0x0800,
344 CEPH_OSD_FLAG_EXEC_PUBLIC = 0x1000,
345 CEPH_OSD_FLAG_LOCALIZE_READS = 0x2000,
346 CEPH_OSD_FLAG_RWORDERED = 0x4000,
347};
348
349enum {
350 CEPH_OSD_OP_FLAG_EXCL = 1,
351 CEPH_OSD_OP_FLAG_FAILOK = 2,
352};
353
354#define EOLDSNAPC ERESTART
355#define EBLACKLISTED ESHUTDOWN
356
357
358enum {
359 CEPH_OSD_CMPXATTR_OP_NOP = 0,
360 CEPH_OSD_CMPXATTR_OP_EQ = 1,
361 CEPH_OSD_CMPXATTR_OP_NE = 2,
362 CEPH_OSD_CMPXATTR_OP_GT = 3,
363 CEPH_OSD_CMPXATTR_OP_GTE = 4,
364 CEPH_OSD_CMPXATTR_OP_LT = 5,
365 CEPH_OSD_CMPXATTR_OP_LTE = 6
366};
367
368enum {
369 CEPH_OSD_CMPXATTR_MODE_STRING = 1,
370 CEPH_OSD_CMPXATTR_MODE_U64 = 2
371};
372
373#define RADOS_NOTIFY_VER 1
374
375
376
377
378
379struct ceph_osd_op {
380 __le16 op;
381 __le32 flags;
382 union {
383 struct {
384 __le64 offset, length;
385 __le64 truncate_size;
386 __le32 truncate_seq;
387 } __attribute__ ((packed)) extent;
388 struct {
389 __le32 name_len;
390 __le32 value_len;
391 __u8 cmp_op;
392 __u8 cmp_mode;
393 } __attribute__ ((packed)) xattr;
394 struct {
395 __u8 class_len;
396 __u8 method_len;
397 __u8 argc;
398 __le32 indata_len;
399 } __attribute__ ((packed)) cls;
400 struct {
401 __le64 cookie, count;
402 } __attribute__ ((packed)) pgls;
403 struct {
404 __le64 snapid;
405 } __attribute__ ((packed)) snap;
406 struct {
407 __le64 cookie;
408 __le64 ver;
409 __u8 flag;
410 } __attribute__ ((packed)) watch;
411 struct {
412 __le64 offset, length;
413 __le64 src_offset;
414 } __attribute__ ((packed)) clonerange;
415 };
416 __le32 payload_len;
417} __attribute__ ((packed));
418
419
420#endif
421