#define RBD_FEATURE_DATA_POOL (1ULL<<7)
#define RBD_FEATURE_OPERATIONS (1ULL<<8)
#define RBD_FEATURE_MIGRATING (1ULL<<9)
+#define RBD_FEATURE_NON_PRIMARY (1ULL<<10)
#define RBD_FEATURES_DEFAULT (RBD_FEATURE_LAYERING | \
RBD_FEATURE_EXCLUSIVE_LOCK | \
#define RBD_FEATURE_NAME_DATA_POOL "data-pool"
#define RBD_FEATURE_NAME_OPERATIONS "operations"
#define RBD_FEATURE_NAME_MIGRATING "migrating"
+#define RBD_FEATURE_NAME_NON_PRIMARY "non-primary"
/// features that make an image inaccessible for read or write by
/// clients that don't understand them
RBD_FEATURE_DEEP_FLATTEN | \
RBD_FEATURE_JOURNALING | \
RBD_FEATURE_OPERATIONS | \
- RBD_FEATURE_MIGRATING)
+ RBD_FEATURE_MIGRATING | \
+ RBD_FEATURE_NON_PRIMARY)
#define RBD_FEATURES_ALL (RBD_FEATURE_LAYERING | \
RBD_FEATURE_STRIPINGV2 | \
RBD_FEATURE_JOURNALING | \
RBD_FEATURE_DATA_POOL | \
RBD_FEATURE_OPERATIONS | \
- RBD_FEATURE_MIGRATING)
+ RBD_FEATURE_MIGRATING | \
+ RBD_FEATURE_NON_PRIMARY)
/// features that may be dynamically enabled or disabled
#define RBD_FEATURES_MUTABLE (RBD_FEATURE_EXCLUSIVE_LOCK | \
RBD_FEATURE_OBJECT_MAP | \
RBD_FEATURE_FAST_DIFF | \
- RBD_FEATURE_JOURNALING)
+ RBD_FEATURE_JOURNALING | \
+ RBD_FEATURE_NON_PRIMARY)
/// features that may be dynamically disabled
#define RBD_FEATURES_DISABLE_ONLY (RBD_FEATURE_DEEP_FLATTEN)
RBD_FEATURE_JOURNALING)
/// features that will be implicitly enabled
-#define RBD_FEATURES_IMPLICIT_ENABLE (RBD_FEATURE_STRIPINGV2 | \
- RBD_FEATURE_DATA_POOL | \
- RBD_FEATURE_FAST_DIFF | \
- RBD_FEATURE_OPERATIONS | \
- RBD_FEATURE_MIGRATING)
+#define RBD_FEATURES_IMPLICIT_ENABLE (RBD_FEATURE_STRIPINGV2 | \
+ RBD_FEATURE_DATA_POOL | \
+ RBD_FEATURE_FAST_DIFF | \
+ RBD_FEATURE_OPERATIONS | \
+ RBD_FEATURE_MIGRATING | \
+ RBD_FEATURE_NON_PRIMARY)
/// features that cannot be controlled by the user
#define RBD_FEATURES_INTERNAL (RBD_FEATURE_OPERATIONS | \
{RBD_FEATURE_NAME_DATA_POOL, RBD_FEATURE_DATA_POOL},
{RBD_FEATURE_NAME_OPERATIONS, RBD_FEATURE_OPERATIONS},
{RBD_FEATURE_NAME_MIGRATING, RBD_FEATURE_MIGRATING},
+ {RBD_FEATURE_NAME_NON_PRIMARY, RBD_FEATURE_NON_PRIMARY},
};
-static_assert((RBD_FEATURE_MIGRATING << 1) > RBD_FEATURES_ALL,
+static_assert((RBD_FEATURE_NON_PRIMARY << 1) > RBD_FEATURES_ALL,
"new RBD feature added");
_RBD_FEATURE_DATA_POOL "RBD_FEATURE_DATA_POOL"
_RBD_FEATURE_OPERATIONS "RBD_FEATURE_OPERATIONS"
_RBD_FEATURE_MIGRATING "RBD_FEATURE_MIGRATING"
+ _RBD_FEATURE_NON_PRIMARY "RBD_FEATURE_NON_PRIMARY"
_RBD_FEATURES_INCOMPATIBLE "RBD_FEATURES_INCOMPATIBLE"
_RBD_FEATURES_RW_INCOMPATIBLE "RBD_FEATURES_RW_INCOMPATIBLE"
RBD_FEATURE_DATA_POOL = _RBD_FEATURE_DATA_POOL
RBD_FEATURE_OPERATIONS = _RBD_FEATURE_OPERATIONS
RBD_FEATURE_MIGRATING = _RBD_FEATURE_MIGRATING
+RBD_FEATURE_NON_PRIMARY = _RBD_FEATURE_NON_PRIMARY
RBD_FEATURES_INCOMPATIBLE = _RBD_FEATURES_INCOMPATIBLE
RBD_FEATURES_RW_INCOMPATIBLE = _RBD_FEATURES_RW_INCOMPATIBLE