]> git.proxmox.com Git - ceph.git/blob - ceph/src/include/rbd/features.h
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / include / rbd / features.h
1 #ifndef CEPH_RBD_FEATURES_H
2 #define CEPH_RBD_FEATURES_H
3
4 #define RBD_FEATURE_LAYERING (1ULL<<0)
5 #define RBD_FEATURE_STRIPINGV2 (1ULL<<1)
6 #define RBD_FEATURE_EXCLUSIVE_LOCK (1ULL<<2)
7 #define RBD_FEATURE_OBJECT_MAP (1ULL<<3)
8 #define RBD_FEATURE_FAST_DIFF (1ULL<<4)
9 #define RBD_FEATURE_DEEP_FLATTEN (1ULL<<5)
10 #define RBD_FEATURE_JOURNALING (1ULL<<6)
11 #define RBD_FEATURE_DATA_POOL (1ULL<<7)
12 #define RBD_FEATURE_OPERATIONS (1ULL<<8)
13 #define RBD_FEATURE_MIGRATING (1ULL<<9)
14
15 #define RBD_FEATURES_DEFAULT (RBD_FEATURE_LAYERING | \
16 RBD_FEATURE_EXCLUSIVE_LOCK | \
17 RBD_FEATURE_OBJECT_MAP | \
18 RBD_FEATURE_FAST_DIFF | \
19 RBD_FEATURE_DEEP_FLATTEN)
20
21 #define RBD_FEATURE_NAME_LAYERING "layering"
22 #define RBD_FEATURE_NAME_STRIPINGV2 "striping"
23 #define RBD_FEATURE_NAME_EXCLUSIVE_LOCK "exclusive-lock"
24 #define RBD_FEATURE_NAME_OBJECT_MAP "object-map"
25 #define RBD_FEATURE_NAME_FAST_DIFF "fast-diff"
26 #define RBD_FEATURE_NAME_DEEP_FLATTEN "deep-flatten"
27 #define RBD_FEATURE_NAME_JOURNALING "journaling"
28 #define RBD_FEATURE_NAME_DATA_POOL "data-pool"
29 #define RBD_FEATURE_NAME_OPERATIONS "operations"
30 #define RBD_FEATURE_NAME_MIGRATING "migrating"
31
32 /// features that make an image inaccessible for read or write by
33 /// clients that don't understand them
34 #define RBD_FEATURES_INCOMPATIBLE (RBD_FEATURE_LAYERING | \
35 RBD_FEATURE_STRIPINGV2 | \
36 RBD_FEATURE_DATA_POOL)
37
38 /// features that make an image unwritable by clients that don't understand them
39 #define RBD_FEATURES_RW_INCOMPATIBLE (RBD_FEATURES_INCOMPATIBLE | \
40 RBD_FEATURE_EXCLUSIVE_LOCK | \
41 RBD_FEATURE_OBJECT_MAP | \
42 RBD_FEATURE_FAST_DIFF | \
43 RBD_FEATURE_DEEP_FLATTEN | \
44 RBD_FEATURE_JOURNALING | \
45 RBD_FEATURE_OPERATIONS | \
46 RBD_FEATURE_MIGRATING)
47
48 #define RBD_FEATURES_ALL (RBD_FEATURE_LAYERING | \
49 RBD_FEATURE_STRIPINGV2 | \
50 RBD_FEATURE_EXCLUSIVE_LOCK | \
51 RBD_FEATURE_OBJECT_MAP | \
52 RBD_FEATURE_FAST_DIFF | \
53 RBD_FEATURE_DEEP_FLATTEN | \
54 RBD_FEATURE_JOURNALING | \
55 RBD_FEATURE_DATA_POOL | \
56 RBD_FEATURE_OPERATIONS | \
57 RBD_FEATURE_MIGRATING)
58
59 /// features that may be dynamically enabled or disabled
60 #define RBD_FEATURES_MUTABLE (RBD_FEATURE_EXCLUSIVE_LOCK | \
61 RBD_FEATURE_OBJECT_MAP | \
62 RBD_FEATURE_FAST_DIFF | \
63 RBD_FEATURE_JOURNALING)
64
65 /// features that may be dynamically disabled
66 #define RBD_FEATURES_DISABLE_ONLY (RBD_FEATURE_DEEP_FLATTEN)
67
68 /// features that only work when used with a single client
69 /// using the image for writes
70 #define RBD_FEATURES_SINGLE_CLIENT (RBD_FEATURE_EXCLUSIVE_LOCK | \
71 RBD_FEATURE_OBJECT_MAP | \
72 RBD_FEATURE_FAST_DIFF | \
73 RBD_FEATURE_JOURNALING)
74
75 /// features that will be implicitly enabled
76 #define RBD_FEATURES_IMPLICIT_ENABLE (RBD_FEATURE_STRIPINGV2 | \
77 RBD_FEATURE_DATA_POOL | \
78 RBD_FEATURE_FAST_DIFF | \
79 RBD_FEATURE_OPERATIONS | \
80 RBD_FEATURE_MIGRATING)
81
82 /// features that cannot be controlled by the user
83 #define RBD_FEATURES_INTERNAL (RBD_FEATURE_OPERATIONS | \
84 RBD_FEATURE_MIGRATING)
85
86 #define RBD_OPERATION_FEATURE_CLONE_PARENT (1ULL<<0)
87 #define RBD_OPERATION_FEATURE_CLONE_CHILD (1ULL<<1)
88 #define RBD_OPERATION_FEATURE_GROUP (1ULL<<2)
89 #define RBD_OPERATION_FEATURE_SNAP_TRASH (1ULL<<3)
90
91 #define RBD_OPERATION_FEATURE_NAME_CLONE_PARENT "clone-parent"
92 #define RBD_OPERATION_FEATURE_NAME_CLONE_CHILD "clone-child"
93 #define RBD_OPERATION_FEATURE_NAME_GROUP "group"
94 #define RBD_OPERATION_FEATURE_NAME_SNAP_TRASH "snap-trash"
95
96 /// all valid operation features
97 #define RBD_OPERATION_FEATURES_ALL (RBD_OPERATION_FEATURE_CLONE_PARENT | \
98 RBD_OPERATION_FEATURE_CLONE_CHILD | \
99 RBD_OPERATION_FEATURE_GROUP | \
100 RBD_OPERATION_FEATURE_SNAP_TRASH)
101
102 #endif