]> git.proxmox.com Git - ceph.git/blame - ceph/src/include/rbd/features.h
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / include / rbd / features.h
CommitLineData
7c673cae
FG
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)
11fdf7f2
TL
12#define RBD_FEATURE_OPERATIONS (1ULL<<8)
13#define RBD_FEATURE_MIGRATING (1ULL<<9)
7c673cae
FG
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"
11fdf7f2
TL
29#define RBD_FEATURE_NAME_OPERATIONS "operations"
30#define RBD_FEATURE_NAME_MIGRATING "migrating"
7c673cae
FG
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 | \
11fdf7f2
TL
44 RBD_FEATURE_JOURNALING | \
45 RBD_FEATURE_OPERATIONS | \
46 RBD_FEATURE_MIGRATING)
7c673cae
FG
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 | \
11fdf7f2
TL
55 RBD_FEATURE_DATA_POOL | \
56 RBD_FEATURE_OPERATIONS | \
57 RBD_FEATURE_MIGRATING)
7c673cae
FG
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
11fdf7f2
TL
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
7c673cae 102#endif