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 | */ |
15 | structceph_fsid { |
16 | unsignedcharfsid[16]; |
17 | }; |
18 | |
19 | staticinlineintceph_fsid_compare(conststructceph_fsid *a, |
20 | conststructceph_fsid *b) |
21 | { |
22 | returnmemcmp(a, b, sizeof(*a)); |
23 | } |
24 | |
25 | /* |
26 | * ino, object, etc. |
27 | */ |
28 | typedef__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 | |
33 | structceph_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 | */ |
60 | structceph_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 | */ |
98 | staticinlineintceph_stable_mod(intx, intb, intbmask) |
99 | { |
100 | if ((x & bmask) < b) |
101 | returnx & bmask; |
102 | else |
103 | returnx & (bmask >> 1); |
104 | } |
105 | |
106 | /* |
107 | * object layout - how a given object should be stored. |
108 | */ |
109 | structceph_object_layout { |
110 | structceph_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 | */ |
117 | structceph_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 | |
132 | externconstchar *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 | |
319 | enum { |
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 | |
325 | staticinlineintceph_osd_op_type_lock(intop) |
326 | { |
327 | return (op & CEPH_OSD_OP_TYPE) CEPH_OSD_OP_TYPE_LOCK; |
328 | } |
329 | staticinlineintceph_osd_op_type_data(intop) |
330 | { |
331 | return (op & CEPH_OSD_OP_TYPE) CEPH_OSD_OP_TYPE_DATA; |
332 | } |
333 | staticinlineintceph_osd_op_type_attr(intop) |
334 | { |
335 | return (op & CEPH_OSD_OP_TYPE) CEPH_OSD_OP_TYPE_ATTR; |
336 | } |
337 | staticinlineintceph_osd_op_type_exec(intop) |
338 | { |
339 | return (op & CEPH_OSD_OP_TYPE) CEPH_OSD_OP_TYPE_EXEC; |
340 | } |
341 | staticinlineintceph_osd_op_type_pg(intop) |
342 | { |
343 | return (op & CEPH_OSD_OP_TYPE) CEPH_OSD_OP_TYPE_PG; |
344 | } |
345 | staticinlineintceph_osd_op_type_multi(intop) |
346 | { |
347 | return (op & CEPH_OSD_OP_TYPE) CEPH_OSD_OP_TYPE_MULTI; |
348 | } |
349 | |
350 | staticinlineintceph_osd_op_mode_subop(intop) |
351 | { |
352 | return (op & CEPH_OSD_OP_MODE) CEPH_OSD_OP_MODE_SUB; |
353 | } |
354 | staticinlineintceph_osd_op_mode_read(intop) |
355 | { |
356 | return (op & CEPH_OSD_OP_MODE_RD) && |
357 | op != CEPH_OSD_OP_CALL; |
358 | } |
359 | staticinlineintceph_osd_op_mode_modify(intop) |
360 | { |
361 | returnop & 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 | |
374 | externconstchar *ceph_osd_op_name(intop); |
375 | |
376 | /* |
377 | * osd op flags |
378 | * |
379 | * An op may be READ, WRITE, or READ|WRITE. |
380 | */ |
381 | enum { |
382 | CEPH_OSD_FLAG_ACK = 0x0001, /* want (or is) 'ack' ack */ |
383 | CEPH_OSD_FLAG_ONNVRAM = 0x0002, /* want (or is) 'onnvram' ack */ |
384 | CEPH_OSD_FLAG_ONDISK = 0x0004, /* want (or is) 'ondisk' ack */ |
385 | CEPH_OSD_FLAG_RETRY = 0x0008, /* resend attempt */ |
386 | CEPH_OSD_FLAG_READ = 0x0010, /* op may read */ |
387 | CEPH_OSD_FLAG_WRITE = 0x0020, /* op may write */ |
388 | CEPH_OSD_FLAG_ORDERSNAP = 0x0040, /* EOLDSNAP if snapc is out of order */ |
389 | CEPH_OSD_FLAG_PEERSTAT_OLD = 0x0080, /* DEPRECATED msg includes osd_peer_stat */ |
390 | CEPH_OSD_FLAG_BALANCE_READS = 0x0100, |
391 | CEPH_OSD_FLAG_PARALLELEXEC = 0x0200, /* execute op in parallel */ |
392 | CEPH_OSD_FLAG_PGOP = 0x0400, /* pg op, no object */ |
393 | CEPH_OSD_FLAG_EXEC = 0x0800, /* op may exec */ |
394 | CEPH_OSD_FLAG_EXEC_PUBLIC = 0x1000, /* DEPRECATED op may exec (public) */ |
395 | CEPH_OSD_FLAG_LOCALIZE_READS = 0x2000, /* read from nearby replica, if any */ |
396 | CEPH_OSD_FLAG_RWORDERED = 0x4000, /* order wrt concurrent reads */ |
397 | CEPH_OSD_FLAG_IGNORE_CACHE = 0x8000, /* ignore cache logic */ |
398 | CEPH_OSD_FLAG_SKIPRWLOCKS = 0x10000, /* skip rw locks */ |
399 | CEPH_OSD_FLAG_IGNORE_OVERLAY = 0x20000, /* ignore pool overlay */ |
400 | CEPH_OSD_FLAG_FLUSH = 0x40000, /* this is part of flush */ |
401 | CEPH_OSD_FLAG_MAP_SNAP_CLONE = 0x80000, /* map snap direct to clone id */ |
402 | CEPH_OSD_FLAG_ENFORCE_SNAPC = 0x100000, /* use snapc provided even if |
403 | pool uses pool snaps */ |
404 | CEPH_OSD_FLAG_REDIRECTED = 0x200000, /* op has been redirected */ |
405 | CEPH_OSD_FLAG_KNOWN_REDIR = 0x400000, /* redirect bit is authoritative */ |
406 | CEPH_OSD_FLAG_FULL_TRY = 0x800000, /* try op despite full flag */ |
407 | CEPH_OSD_FLAG_FULL_FORCE = 0x1000000, /* force op despite full flag */ |
408 | }; |
409 | |
410 | enum { |
411 | CEPH_OSD_OP_FLAG_EXCL = 1, /* EXCL object create */ |
412 | CEPH_OSD_OP_FLAG_FAILOK = 2, /* continue despite failure */ |
413 | CEPH_OSD_OP_FLAG_FADVISE_RANDOM = 0x4, /* the op is random */ |
414 | CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL = 0x8, /* the op is sequential */ |
415 | CEPH_OSD_OP_FLAG_FADVISE_WILLNEED = 0x10,/* data will be accessed in |
416 | the near future */ |
417 | CEPH_OSD_OP_FLAG_FADVISE_DONTNEED = 0x20,/* data will not be accessed |
418 | in the near future */ |
419 | CEPH_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 */ |
427 | enum { |
428 | CEPH_OSD_CMPXATTR_OP_NOP = 0, |
429 | CEPH_OSD_CMPXATTR_OP_EQ = 1, |
430 | CEPH_OSD_CMPXATTR_OP_NE = 2, |
431 | CEPH_OSD_CMPXATTR_OP_GT = 3, |
432 | CEPH_OSD_CMPXATTR_OP_GTE = 4, |
433 | CEPH_OSD_CMPXATTR_OP_LT = 5, |
434 | CEPH_OSD_CMPXATTR_OP_LTE = 6 |
435 | }; |
436 | |
437 | enum { |
438 | CEPH_OSD_CMPXATTR_MODE_STRING = 1, |
439 | CEPH_OSD_CMPXATTR_MODE_U64 = 2 |
440 | }; |
441 | |
442 | enum { |
443 | CEPH_OSD_COPY_FROM_FLAG_FLUSH = 1, /* part of a flush operation */ |
444 | CEPH_OSD_COPY_FROM_FLAG_IGNORE_OVERLAY = 2, /* ignore pool overlay */ |
445 | CEPH_OSD_COPY_FROM_FLAG_IGNORE_CACHE = 4, /* ignore osd cache logic */ |
446 | CEPH_OSD_COPY_FROM_FLAG_MAP_SNAP_CLONE = 8, /* map snap direct to |
447 | * cloneid */ |
448 | CEPH_OSD_COPY_FROM_FLAG_RWORDERED = 16, /* order with write */ |
449 | }; |
450 | |
451 | enum { |
452 | CEPH_OSD_WATCH_OP_UNWATCH = 0, |
453 | CEPH_OSD_WATCH_OP_LEGACY_WATCH = 1, |
454 | /* note: use only ODD ids to prevent pre-giant code from |
455 | interpreting the op as UNWATCH */ |
456 | CEPH_OSD_WATCH_OP_WATCH = 3, |
457 | CEPH_OSD_WATCH_OP_RECONNECT = 5, |
458 | CEPH_OSD_WATCH_OP_PING = 7, |
459 | }; |
460 | |
461 | constchar *ceph_osd_watch_op_name(into); |
462 | |
463 | enum { |
464 | CEPH_OSD_BACKOFF_OP_BLOCK = 1, |
465 | CEPH_OSD_BACKOFF_OP_ACK_BLOCK = 2, |
466 | CEPH_OSD_BACKOFF_OP_UNBLOCK = 3, |
467 | }; |
468 | |
469 | /* |
470 | * an individual object operation. each may be accompanied by some data |
471 | * payload |
472 | */ |
473 | structceph_osd_op { |
474 | __le16op; /* CEPH_OSD_OP_* */ |
475 | __le32flags; /* CEPH_OSD_OP_FLAG_* */ |
476 | union { |
477 | struct { |
478 | __le64offset, length; |
479 | __le64truncate_size; |
480 | __le32truncate_seq; |
481 | } __attribute__ ((packed)) extent; |
482 | struct { |
483 | __le32name_len; |
484 | __le32value_len; |
485 | __u8cmp_op; /* CEPH_OSD_CMPXATTR_OP_* */ |
486 | __u8cmp_mode; /* CEPH_OSD_CMPXATTR_MODE_* */ |
487 | } __attribute__ ((packed)) xattr; |
488 | struct { |
489 | __u8class_len; |
490 | __u8method_len; |
491 | __u8argc; |
492 | __le32indata_len; |
493 | } __attribute__ ((packed)) cls; |
494 | struct { |
495 | __le64cookie, count; |
496 | } __attribute__ ((packed)) pgls; |
497 | struct { |
498 | __le64snapid; |
499 | } __attribute__ ((packed)) snap; |
500 | struct { |
501 | __le64cookie; |
502 | __le64ver; /* no longer used */ |
503 | __u8op; /* CEPH_OSD_WATCH_OP_* */ |
504 | __le32gen; /* registration generation */ |
505 | } __attribute__ ((packed)) watch; |
506 | struct { |
507 | __le64cookie; |
508 | } __attribute__ ((packed)) notify; |
509 | struct { |
510 | __le64offset, length; |
511 | __le64src_offset; |
512 | } __attribute__ ((packed)) clonerange; |
513 | struct { |
514 | __le64expected_object_size; |
515 | __le64expected_write_size; |
516 | } __attribute__ ((packed)) alloc_hint; |
517 | struct { |
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 |
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.
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 DougPurchased 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: MFA-15 LCAR 5.56 NATO 16
A-15 LCAR 5.56 NATO 16!A-15 LCAR 5.56 NATO 16
A-15 LCAR 5.56 NATO 16!5/5 StarsReview on: November 21, 2019Review by: MFA-15 LCAR 5.56 NATO 16