HomeBlogAbout Me

Maxsnap 1 56th



1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndefCEPH_RADOS_H
3#define CEPH_RADOS_H
4
5/*
6 * Data types for the Ceph distributed object storage layer RADOS
7 * (Reliable Autonomic Distributed Object Store).
8 */
9
10#include <linux/ceph/msgr.h>
11
12/*
13 * fs id
14 */
15structceph_fsid {
16unsignedcharfsid[16];
17};
18
19staticinlineintceph_fsid_compare(conststructceph_fsid *a,
20conststructceph_fsid *b)
21{
22returnmemcmp(a, b, sizeof(*a));
23}
24
25/*
26 * ino, object, etc.
27 */
28typedef__le64ceph_snapid_t;
29#define CEPH_SNAPDIR ((__u64)(-1)) /* reserved for hidden .snap dir */
30#define CEPH_NOSNAP ((__u64)(-2)) /* 'head', 'live' revision */
31#define CEPH_MAXSNAP ((__u64)(-3)) /* largest valid snapid */
32
33structceph_timespec {
34__le32tv_sec;
35__le32tv_nsec;
36} __attribute__ ((packed));
37
38
39/*
40 * object layout - how objects are mapped into PGs
41 */
42#define CEPH_OBJECT_LAYOUT_HASH 1
43#define CEPH_OBJECT_LAYOUT_LINEAR 2
44#define CEPH_OBJECT_LAYOUT_HASHINO 3
45
46/*
47 * pg layout -- how PGs are mapped onto (sets of) OSDs
48 */
49#define CEPH_PG_LAYOUT_CRUSH 0
50#define CEPH_PG_LAYOUT_HASH 1
51#define CEPH_PG_LAYOUT_LINEAR 2
52#define CEPH_PG_LAYOUT_HYBRID 3
53
54#define CEPH_PG_MAX_SIZE 32 /* max # osds in a single pg */
55
56/*
57 * placement group.
58 * we encode this into one __le64.
59 */
60structceph_pg_v1 {
61__le16preferred; /* preferred primary osd */
62__le16ps; /* placement seed */
63__le32pool; /* object pool */
64} __attribute__ ((packed));
65
66/*
67 * pg_pool is a set of pgs storing a pool of objects
68 *
69 * pg_num -- base number of pseudorandomly placed pgs
70 *
71 * pgp_num -- effective number when calculating pg placement. this
72 * is used for pg_num increases. new pgs result in data being 'split'
73 * into new pgs. for this to proceed smoothly, new pgs are intiially
74 * colocated with their parents; that is, pgp_num doesn't increase
75 * until the new pgs have successfully split. only _then_ are the new
76 * pgs placed independently.
77 *
78 * lpg_num -- localized pg count (per device). replicas are randomly
79 * selected.
80 *
81 * lpgp_num -- as above.
82 */
83#define CEPH_NOPOOL ((__u64) (-1)) /* pool id not defined */
84
85#define CEPH_POOL_TYPE_REP 1
86#define CEPH_POOL_TYPE_RAID4 2 /* never implemented */
87#define CEPH_POOL_TYPE_EC 3
88
89/*
90 * stable_mod func is used to control number of placement groups.
91 * similar to straight-up modulo, but produces a stable mapping as b
92 * increases over time. b is the number of bins, and bmask is the
93 * containing power of 2 minus 1.
94 *
95 * b <= bmask and bmask=(2**n)-1
96 * e.g., b=12 -> bmask=15, b=123 -> bmask=127
97 */
98staticinlineintceph_stable_mod(intx, intb, intbmask)
99{
100if ((x & bmask) < b)
101returnx & bmask;
102else
103returnx & (bmask >> 1);
104}
105
106/*
107 * object layout - how a given object should be stored.
108 */
109structceph_object_layout {
110structceph_pg_v1ol_pgid; /* raw pg, with _full_ ps precision. */
111__le32ol_stripe_unit; /* for per-object parity, if any */
112} __attribute__ ((packed));
113
114/*
115 * compound epoch+version, used by storage layer to serialize mutations
116 */
117structceph_eversion {
118__le64version;
119__le32epoch;
120} __attribute__ ((packed));
121
122/*
123 * osd map bits
124 */
125
126/* status bits */
127#define CEPH_OSD_EXISTS (1<<0)
128#define CEPH_OSD_UP (1<<1)
129#define CEPH_OSD_AUTOOUT (1<<2) /* osd was automatically marked out */
130#define CEPH_OSD_NEW (1<<3) /* osd is new, never marked in */
131
132externconstchar *ceph_osd_state_name(ints);
133
134/* osd weights. fixed point value: 0x10000 1.0 ('in'), 0 'out' */
135#define CEPH_OSD_IN 0x10000
136#define CEPH_OSD_OUT 0
137
138/* osd primary-affinity. fixed point value: 0x10000 baseline */
139#define CEPH_OSD_MAX_PRIMARY_AFFINITY 0x10000
140#define CEPH_OSD_DEFAULT_PRIMARY_AFFINITY 0x10000
141
142
143/*
144 * osd map flag bits
145 */
146#define CEPH_OSDMAP_NEARFULL (1<<0) /* sync writes (near ENOSPC) */
147#define CEPH_OSDMAP_FULL (1<<1) /* no data writes (ENOSPC) */
148#define CEPH_OSDMAP_PAUSERD (1<<2) /* pause all reads */
149#define CEPH_OSDMAP_PAUSEWR (1<<3) /* pause all writes */
150#define CEPH_OSDMAP_PAUSEREC (1<<4) /* pause recovery */
151#define CEPH_OSDMAP_NOUP (1<<5) /* block osd boot */
152#define CEPH_OSDMAP_NODOWN (1<<6) /* block osd mark-down/failure */
153#define CEPH_OSDMAP_NOOUT (1<<7) /* block osd auto mark-out */
154#define CEPH_OSDMAP_NOIN (1<<8) /* block osd auto mark-in */
155#define CEPH_OSDMAP_NOBACKFILL (1<<9) /* block osd backfill */
156#define CEPH_OSDMAP_NORECOVER (1<<10) /* block osd recovery and backfill */
157#define CEPH_OSDMAP_NOSCRUB (1<<11) /* block periodic scrub */
158#define CEPH_OSDMAP_NODEEP_SCRUB (1<<12) /* block periodic deep-scrub */
159#define CEPH_OSDMAP_NOTIERAGENT (1<<13) /* disable tiering agent */
160#define CEPH_OSDMAP_NOREBALANCE (1<<14) /* block osd backfill unless pg is degraded */
161#define CEPH_OSDMAP_SORTBITWISE (1<<15) /* use bitwise hobject_t sort */
162#define CEPH_OSDMAP_REQUIRE_JEWEL (1<<16) /* require jewel for booting osds */
163#define CEPH_OSDMAP_REQUIRE_KRAKEN (1<<17) /* require kraken for booting osds */
164#define CEPH_OSDMAP_REQUIRE_LUMINOUS (1<<18) /* require l for booting osds */
165#define CEPH_OSDMAP_RECOVERY_DELETES (1<<19) /* deletes performed during recovery instead of peering */
166
167/*
168 * The error code to return when an OSD can't handle a write
169 * because it is too large.
170 */
171#define OSD_WRITETOOBIG EMSGSIZE
172
173/*
174 * osd ops
175 *
176 * WARNING: do not use these op codes directly. Use the helpers
177 * defined below instead. In certain cases, op code behavior was
178 * redefined, resulting in special-cases in the helpers.
179 */
180#define CEPH_OSD_OP_MODE 0xf000
181#define CEPH_OSD_OP_MODE_RD 0x1000
182#define CEPH_OSD_OP_MODE_WR 0x2000
183#define CEPH_OSD_OP_MODE_RMW 0x3000
184#define CEPH_OSD_OP_MODE_SUB 0x4000
185#define CEPH_OSD_OP_MODE_CACHE 0x8000
186
187#define CEPH_OSD_OP_TYPE 0x0f00
188#define CEPH_OSD_OP_TYPE_LOCK 0x0100
189#define CEPH_OSD_OP_TYPE_DATA 0x0200
190#define CEPH_OSD_OP_TYPE_ATTR 0x0300
191#define CEPH_OSD_OP_TYPE_EXEC 0x0400
192#define CEPH_OSD_OP_TYPE_PG 0x0500
193#define CEPH_OSD_OP_TYPE_MULTI 0x0600 /* multiobject */
194
195#define __CEPH_OSD_OP1(mode, nr)
196 (CEPH_OSD_OP_MODE_##mode | (nr))
197
198#define __CEPH_OSD_OP(mode, type, nr)
199 (CEPH_OSD_OP_MODE_##mode | CEPH_OSD_OP_TYPE_##type | (nr))
200
201#define __CEPH_FORALL_OSD_OPS(f)
202 /** data **/
203 /* read */
204 f(READ, __CEPH_OSD_OP(RD, DATA, 1), 'read')
205 f(STAT, __CEPH_OSD_OP(RD, DATA, 2), 'stat')
206 f(MAPEXT, __CEPH_OSD_OP(RD, DATA, 3), 'mapext')
207
208 /* fancy read */
209 f(MASKTRUNC, __CEPH_OSD_OP(RD, DATA, 4), 'masktrunc')
210 f(SPARSE_READ, __CEPH_OSD_OP(RD, DATA, 5), 'sparse-read')
211
212 f(NOTIFY, __CEPH_OSD_OP(RD, DATA, 6), 'notify')
213 f(NOTIFY_ACK, __CEPH_OSD_OP(RD, DATA, 7), 'notify-ack')
214
215 /* versioning */
216 f(ASSERT_VER, __CEPH_OSD_OP(RD, DATA, 8), 'assert-version')
217
218 f(LIST_WATCHERS, __CEPH_OSD_OP(RD, DATA, 9), 'list-watchers')
219
220 f(LIST_SNAPS, __CEPH_OSD_OP(RD, DATA, 10), 'list-snaps')
221
222 /* sync */
223 f(SYNC_READ, __CEPH_OSD_OP(RD, DATA, 11), 'sync_read')
224
225 /* write */
226 f(WRITE, __CEPH_OSD_OP(WR, DATA, 1), 'write')
227 f(WRITEFULL, __CEPH_OSD_OP(WR, DATA, 2), 'writefull')
228 f(TRUNCATE, __CEPH_OSD_OP(WR, DATA, 3), 'truncate')
229 f(ZERO, __CEPH_OSD_OP(WR, DATA, 4), 'zero')
230 f(DELETE, __CEPH_OSD_OP(WR, DATA, 5), 'delete')
231
232 /* fancy write */
233 f(APPEND, __CEPH_OSD_OP(WR, DATA, 6), 'append')
234 f(SETTRUNC, __CEPH_OSD_OP(WR, DATA, 8), 'settrunc')
235 f(TRIMTRUNC, __CEPH_OSD_OP(WR, DATA, 9), 'trimtrunc')
236
237 f(TMAPUP, __CEPH_OSD_OP(RMW, DATA, 10), 'tmapup')
238 f(TMAPPUT, __CEPH_OSD_OP(WR, DATA, 11), 'tmapput')
239 f(TMAPGET, __CEPH_OSD_OP(RD, DATA, 12), 'tmapget')
240
241 f(CREATE, __CEPH_OSD_OP(WR, DATA, 13), 'create')
242 f(ROLLBACK, __CEPH_OSD_OP(WR, DATA, 14), 'rollback')
243
244 f(WATCH, __CEPH_OSD_OP(WR, DATA, 15), 'watch')
245
246 /* omap */
247 f(OMAPGETKEYS, __CEPH_OSD_OP(RD, DATA, 17), 'omap-get-keys')
248 f(OMAPGETVALS, __CEPH_OSD_OP(RD, DATA, 18), 'omap-get-vals')
249 f(OMAPGETHEADER, __CEPH_OSD_OP(RD, DATA, 19), 'omap-get-header')
250 f(OMAPGETVALSBYKEYS, __CEPH_OSD_OP(RD, DATA, 20), 'omap-get-vals-by-keys')
251 f(OMAPSETVALS, __CEPH_OSD_OP(WR, DATA, 21), 'omap-set-vals')
252 f(OMAPSETHEADER, __CEPH_OSD_OP(WR, DATA, 22), 'omap-set-header')
253 f(OMAPCLEAR, __CEPH_OSD_OP(WR, DATA, 23), 'omap-clear')
254 f(OMAPRMKEYS, __CEPH_OSD_OP(WR, DATA, 24), 'omap-rm-keys')
255 f(OMAP_CMP, __CEPH_OSD_OP(RD, DATA, 25), 'omap-cmp')
256
257 /* tiering */
258 f(COPY_FROM, __CEPH_OSD_OP(WR, DATA, 26), 'copy-from')
259 f(COPY_GET_CLASSIC, __CEPH_OSD_OP(RD, DATA, 27), 'copy-get-classic')
260 f(UNDIRTY, __CEPH_OSD_OP(WR, DATA, 28), 'undirty')
261 f(ISDIRTY, __CEPH_OSD_OP(RD, DATA, 29), 'isdirty')
262 f(COPY_GET, __CEPH_OSD_OP(RD, DATA, 30), 'copy-get')
263 f(CACHE_FLUSH, __CEPH_OSD_OP(CACHE, DATA, 31), 'cache-flush')
264 f(CACHE_EVICT, __CEPH_OSD_OP(CACHE, DATA, 32), 'cache-evict')
265 f(CACHE_TRY_FLUSH, __CEPH_OSD_OP(CACHE, DATA, 33), 'cache-try-flush')
266
267 /* convert tmap to omap */
268 f(TMAP2OMAP, __CEPH_OSD_OP(RMW, DATA, 34), 'tmap2omap')
269
270 /* hints */
271 f(SETALLOCHINT, __CEPH_OSD_OP(WR, DATA, 35), 'set-alloc-hint')
272
273 /** multi **/
274 f(CLONERANGE, __CEPH_OSD_OP(WR, MULTI, 1), 'clonerange')
275 f(ASSERT_SRC_VERSION, __CEPH_OSD_OP(RD, MULTI, 2), 'assert-src-version')
276 f(SRC_CMPXATTR, __CEPH_OSD_OP(RD, MULTI, 3), 'src-cmpxattr')
277
278 /** attrs **/
279 /* read */
280 f(GETXATTR, __CEPH_OSD_OP(RD, ATTR, 1), 'getxattr')
281 f(GETXATTRS, __CEPH_OSD_OP(RD, ATTR, 2), 'getxattrs')
282 f(CMPXATTR, __CEPH_OSD_OP(RD, ATTR, 3), 'cmpxattr')
283
284 /* write */
285 f(SETXATTR, __CEPH_OSD_OP(WR, ATTR, 1), 'setxattr')
286 f(SETXATTRS, __CEPH_OSD_OP(WR, ATTR, 2), 'setxattrs')
287 f(RESETXATTRS, __CEPH_OSD_OP(WR, ATTR, 3), 'resetxattrs')
288 f(RMXATTR, __CEPH_OSD_OP(WR, ATTR, 4), 'rmxattr')
289
290 /** subop **/
291 f(PULL, __CEPH_OSD_OP1(SUB, 1), 'pull')
292 f(PUSH, __CEPH_OSD_OP1(SUB, 2), 'push')
293 f(BALANCEREADS, __CEPH_OSD_OP1(SUB, 3), 'balance-reads')
294 f(UNBALANCEREADS, __CEPH_OSD_OP1(SUB, 4), 'unbalance-reads')
295 f(SCRUB, __CEPH_OSD_OP1(SUB, 5), 'scrub')
296 f(SCRUB_RESERVE, __CEPH_OSD_OP1(SUB, 6), 'scrub-reserve')
297 f(SCRUB_UNRESERVE, __CEPH_OSD_OP1(SUB, 7), 'scrub-unreserve')
298 f(SCRUB_STOP, __CEPH_OSD_OP1(SUB, 8), 'scrub-stop')
299 f(SCRUB_MAP, __CEPH_OSD_OP1(SUB, 9), 'scrub-map')
300
301 /** lock **/
302 f(WRLOCK, __CEPH_OSD_OP(WR, LOCK, 1), 'wrlock')
303 f(WRUNLOCK, __CEPH_OSD_OP(WR, LOCK, 2), 'wrunlock')
304 f(RDLOCK, __CEPH_OSD_OP(WR, LOCK, 3), 'rdlock')
305 f(RDUNLOCK, __CEPH_OSD_OP(WR, LOCK, 4), 'rdunlock')
306 f(UPLOCK, __CEPH_OSD_OP(WR, LOCK, 5), 'uplock')
307 f(DNLOCK, __CEPH_OSD_OP(WR, LOCK, 6), 'dnlock')
308
309 /** exec **/
310 /* note: the RD bit here is wrong; see special-case below in helper */
311 f(CALL, __CEPH_OSD_OP(RD, EXEC, 1), 'call')
312
313 /** pg **/
314 f(PGLS, __CEPH_OSD_OP(RD, PG, 1), 'pgls')
315 f(PGLS_FILTER, __CEPH_OSD_OP(RD, PG, 2), 'pgls-filter')
316 f(PG_HITSET_LS, __CEPH_OSD_OP(RD, PG, 3), 'pg-hitset-ls')
317 f(PG_HITSET_GET, __CEPH_OSD_OP(RD, PG, 4), 'pg-hitset-get')
318
319enum {
320#define GENERATE_ENUM_ENTRY(op, opcode, str) CEPH_OSD_OP_##op = (opcode),
321__CEPH_FORALL_OSD_OPS(GENERATE_ENUM_ENTRY)
322#undef GENERATE_ENUM_ENTRY
323};
324
325staticinlineintceph_osd_op_type_lock(intop)
326{
327return (op & CEPH_OSD_OP_TYPE) CEPH_OSD_OP_TYPE_LOCK;
328}
329staticinlineintceph_osd_op_type_data(intop)
330{
331return (op & CEPH_OSD_OP_TYPE) CEPH_OSD_OP_TYPE_DATA;
332}
333staticinlineintceph_osd_op_type_attr(intop)
334{
335return (op & CEPH_OSD_OP_TYPE) CEPH_OSD_OP_TYPE_ATTR;
336}
337staticinlineintceph_osd_op_type_exec(intop)
338{
339return (op & CEPH_OSD_OP_TYPE) CEPH_OSD_OP_TYPE_EXEC;
340}
341staticinlineintceph_osd_op_type_pg(intop)
342{
343return (op & CEPH_OSD_OP_TYPE) CEPH_OSD_OP_TYPE_PG;
344}
345staticinlineintceph_osd_op_type_multi(intop)
346{
347return (op & CEPH_OSD_OP_TYPE) CEPH_OSD_OP_TYPE_MULTI;
348}
349
350staticinlineintceph_osd_op_mode_subop(intop)
351{
352return (op & CEPH_OSD_OP_MODE) CEPH_OSD_OP_MODE_SUB;
353}
354staticinlineintceph_osd_op_mode_read(intop)
355{
356return (op & CEPH_OSD_OP_MODE_RD) &&
357op != CEPH_OSD_OP_CALL;
358}
359staticinlineintceph_osd_op_mode_modify(intop)
360{
361returnop & CEPH_OSD_OP_MODE_WR;
362}
363
364/*
365 * note that the following tmap stuff is also defined in the ceph librados.h
366 * any modification here needs to be updated there
367 */
368#define CEPH_OSD_TMAP_HDR 'h'
369#define CEPH_OSD_TMAP_SET 's'
370#define CEPH_OSD_TMAP_CREATE 'c' /* create key */
371#define CEPH_OSD_TMAP_RM 'r'
372#define CEPH_OSD_TMAP_RMSLOPPY 'R'
373
374externconstchar *ceph_osd_op_name(intop);
375
376/*
377 * osd op flags
378 *
379 * An op may be READ, WRITE, or READ|WRITE.
380 */
381enum {
382CEPH_OSD_FLAG_ACK = 0x0001, /* want (or is) 'ack' ack */
383CEPH_OSD_FLAG_ONNVRAM = 0x0002, /* want (or is) 'onnvram' ack */
384CEPH_OSD_FLAG_ONDISK = 0x0004, /* want (or is) 'ondisk' ack */
385CEPH_OSD_FLAG_RETRY = 0x0008, /* resend attempt */
386CEPH_OSD_FLAG_READ = 0x0010, /* op may read */
387CEPH_OSD_FLAG_WRITE = 0x0020, /* op may write */
388CEPH_OSD_FLAG_ORDERSNAP = 0x0040, /* EOLDSNAP if snapc is out of order */
389CEPH_OSD_FLAG_PEERSTAT_OLD = 0x0080, /* DEPRECATED msg includes osd_peer_stat */
390CEPH_OSD_FLAG_BALANCE_READS = 0x0100,
391CEPH_OSD_FLAG_PARALLELEXEC = 0x0200, /* execute op in parallel */
392CEPH_OSD_FLAG_PGOP = 0x0400, /* pg op, no object */
393CEPH_OSD_FLAG_EXEC = 0x0800, /* op may exec */
394CEPH_OSD_FLAG_EXEC_PUBLIC = 0x1000, /* DEPRECATED op may exec (public) */
395CEPH_OSD_FLAG_LOCALIZE_READS = 0x2000, /* read from nearby replica, if any */
396CEPH_OSD_FLAG_RWORDERED = 0x4000, /* order wrt concurrent reads */
397CEPH_OSD_FLAG_IGNORE_CACHE = 0x8000, /* ignore cache logic */
398CEPH_OSD_FLAG_SKIPRWLOCKS = 0x10000, /* skip rw locks */
399CEPH_OSD_FLAG_IGNORE_OVERLAY = 0x20000, /* ignore pool overlay */
400CEPH_OSD_FLAG_FLUSH = 0x40000, /* this is part of flush */
401CEPH_OSD_FLAG_MAP_SNAP_CLONE = 0x80000, /* map snap direct to clone id */
402CEPH_OSD_FLAG_ENFORCE_SNAPC = 0x100000, /* use snapc provided even if
403 pool uses pool snaps */
404CEPH_OSD_FLAG_REDIRECTED = 0x200000, /* op has been redirected */
405CEPH_OSD_FLAG_KNOWN_REDIR = 0x400000, /* redirect bit is authoritative */
406CEPH_OSD_FLAG_FULL_TRY = 0x800000, /* try op despite full flag */
407CEPH_OSD_FLAG_FULL_FORCE = 0x1000000, /* force op despite full flag */
408};
409
410enum {
411CEPH_OSD_OP_FLAG_EXCL = 1, /* EXCL object create */
412CEPH_OSD_OP_FLAG_FAILOK = 2, /* continue despite failure */
413CEPH_OSD_OP_FLAG_FADVISE_RANDOM = 0x4, /* the op is random */
414CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL = 0x8, /* the op is sequential */
415CEPH_OSD_OP_FLAG_FADVISE_WILLNEED = 0x10,/* data will be accessed in
416 the near future */
417CEPH_OSD_OP_FLAG_FADVISE_DONTNEED = 0x20,/* data will not be accessed
418 in the near future */
419CEPH_OSD_OP_FLAG_FADVISE_NOCACHE = 0x40,/* data will be accessed only
420 once by this client */
421};
422
423#define EOLDSNAPC ERESTART /* ORDERSNAP flag set; writer has old snapc*/
424#define EBLACKLISTED ESHUTDOWN /* blacklisted */
425
426/* xattr comparison */
427enum {
428CEPH_OSD_CMPXATTR_OP_NOP = 0,
429CEPH_OSD_CMPXATTR_OP_EQ = 1,
430CEPH_OSD_CMPXATTR_OP_NE = 2,
431CEPH_OSD_CMPXATTR_OP_GT = 3,
432CEPH_OSD_CMPXATTR_OP_GTE = 4,
433CEPH_OSD_CMPXATTR_OP_LT = 5,
434CEPH_OSD_CMPXATTR_OP_LTE = 6
435};
436
437enum {
438CEPH_OSD_CMPXATTR_MODE_STRING = 1,
439CEPH_OSD_CMPXATTR_MODE_U64 = 2
440};
441
442enum {
443CEPH_OSD_COPY_FROM_FLAG_FLUSH = 1, /* part of a flush operation */
444CEPH_OSD_COPY_FROM_FLAG_IGNORE_OVERLAY = 2, /* ignore pool overlay */
445CEPH_OSD_COPY_FROM_FLAG_IGNORE_CACHE = 4, /* ignore osd cache logic */
446CEPH_OSD_COPY_FROM_FLAG_MAP_SNAP_CLONE = 8, /* map snap direct to
447 * cloneid */
448CEPH_OSD_COPY_FROM_FLAG_RWORDERED = 16, /* order with write */
449};
450
451enum {
452CEPH_OSD_WATCH_OP_UNWATCH = 0,
453CEPH_OSD_WATCH_OP_LEGACY_WATCH = 1,
454/* note: use only ODD ids to prevent pre-giant code from
455 interpreting the op as UNWATCH */
456CEPH_OSD_WATCH_OP_WATCH = 3,
457CEPH_OSD_WATCH_OP_RECONNECT = 5,
458CEPH_OSD_WATCH_OP_PING = 7,
459};
460
461constchar *ceph_osd_watch_op_name(into);
462
463enum {
464CEPH_OSD_BACKOFF_OP_BLOCK = 1,
465CEPH_OSD_BACKOFF_OP_ACK_BLOCK = 2,
466CEPH_OSD_BACKOFF_OP_UNBLOCK = 3,
467};
468
469/*
470 * an individual object operation. each may be accompanied by some data
471 * payload
472 */
473structceph_osd_op {
474__le16op; /* CEPH_OSD_OP_* */
475__le32flags; /* CEPH_OSD_OP_FLAG_* */
476union {
477struct {
478__le64offset, length;
479__le64truncate_size;
480__le32truncate_seq;
481 } __attribute__ ((packed)) extent;
482struct {
483__le32name_len;
484__le32value_len;
485__u8cmp_op; /* CEPH_OSD_CMPXATTR_OP_* */
486__u8cmp_mode; /* CEPH_OSD_CMPXATTR_MODE_* */
487 } __attribute__ ((packed)) xattr;
488struct {
489__u8class_len;
490__u8method_len;
491__u8argc;
492__le32indata_len;
493 } __attribute__ ((packed)) cls;
494struct {
495__le64cookie, count;
496 } __attribute__ ((packed)) pgls;
497struct {
498__le64snapid;
499 } __attribute__ ((packed)) snap;
500struct {
501__le64cookie;
502__le64ver; /* no longer used */
503__u8op; /* CEPH_OSD_WATCH_OP_* */
504__le32gen; /* registration generation */
505 } __attribute__ ((packed)) watch;
506struct {
507__le64cookie;
508 } __attribute__ ((packed)) notify;
509struct {
510__le64offset, length;
511__le64src_offset;
512 } __attribute__ ((packed)) clonerange;
513struct {
514__le64expected_object_size;
515__le64expected_write_size;
516 } __attribute__ ((packed)) alloc_hint;
517struct {
518__le64snapid;
519__le64src_version;
520__u8flags; /* CEPH_OSD_COPY_FROM_FLAG_* */
521/*
522 * CEPH_OSD_OP_FLAG_FADVISE_*: fadvise flags
523 * for src object, flags for dest object are in
524 * ceph_osd_op::flags.
525 */
526__le32src_fadvise_flags;
527 } __attribute__ ((packed)) copy_from;
528 };
529__le32payload_len;
530} __attribute__ ((packed));
531
532
533#endif
534
  1. Maxsnap 1 56th Birthday
  2. Maxsnap 1 56th Street
  3. Maxsnap 1 56th St
56th

Maxsnap 1 56th Birthday

Auto tune 5 setup. Apple numbers 6 2 1. The 56th Fighter Wing was activated 15 August 1947 at Selfridge Field, Michigan as part of the United States Air Force 's experimental wing base reorganization, in which combat groups and all supporting units on a base were assigned to a single wing. The 56th Fighter Group, flying Lockheed P-80 Shooting Stars, became its operational component.

Reviews

# define JITFSSE41 0x00000080 # define JITFP4 0x00000100 # define JITFPREFERIMUL 0x00000200 # define JITFSPLITXMM 0x00000400 # define JITFLEAAGU 0x00000800 /. Names for the CPU-specific flags. Must match the order above./ # define JITFCPUFIRST JITFCMOV # define JITFCPUSTRING ' 4 CMOV 4 SSE2 4 SSE3 6 SSE4.1 2 P4 3. Jun 19, 2020 Mortal Kombat 11 1.0.16 # Of Codes: 10 by: Smoker1 on: Apr - 26 - 2020 Nintendo Switch ALL Regions Doom II Classic v1.0.6 # Of Codes: 5 by: Smoker1 on: Apr - 04 - 2020 Nintendo Switch ALL Regions Doom (1993) Classic v1.0.6 # Of Codes: 3 by: Smoker1 on: Apr - 04 - 2020 Nintendo Switch JPN Region Dead or School # Of Codes: 8 by: Hblade2002.

Average of 5 customer reviews:
Install sports donkey.

Shipped next day, one issue but being resolved!5/5 StarsReview on: September 7, 2019Review by: DougMaxsnap 1 56th

2nd rifle purchased from Smoky Mountain. The price and free shipping beat the next closest competitor by $50. Shipped next day Fedex ground, arrived in a week. Rifle looks beautiful. Jeff 1 0 download free. High quality like my Oracle with some changes like a lighter barrel. Field stripped and inspected at home and found the bolt gas rings were too large. Called DPMS and they immediately shipped new rings. Havent taken to the range yet but Im expecting it to shoot as well as my Oracle. Recommding Smoky Mountain to friends and family!

Love this gun!5/5 StarsReview on: October 22, 2019Review by: Yuma Doug

Purchased this rifle and a Smith & Wesson m&p sport II. The LCAR performed flawlessly. Used a laser and the sites were right on target straight out of the box. The Smith & Wesson was close to being on the target. The very first round of the M&P was a failure to feed but after one clip it was fine. The LCAR looks great, pretty much a clone of the Smith & Wesson. Both are great guns but I think the LCAR is better. Amazing price.

A-15 LCAR 5.56 NATO 16!5/5 StarsReview on: November 21, 2019Review by: MF

A-15 LCAR 5.56 NATO 16

A-15 LCAR 5.56 NATO 16!

Maxsnap 1 56th Street

5/5 StarsReview on: November 21, 2019Review by: MF

A-15 LCAR 5.56 NATO 16

A-15 LCAR 5.56 NATO 16!5/5 StarsReview on: November 21, 2019Review by: MF

Maxsnap 1 56th St

A-15 LCAR 5.56 NATO 16





Maxsnap 1 56th
Back to posts
This post has no comments - be the first one!

UNDER MAINTENANCE

pacman, rainbows, and roller s