From 7e0d1a97c60b43c4de27ac89b53b9eb83d0379dd Mon Sep 17 00:00:00 2001 From: Yuan Lu Date: Wed, 10 Jun 2020 00:36:11 +0800 Subject: [PATCH] librbd: add IMAGE_CACHE feature Signed-off-by: Peterson, Scott Signed-off-by: Li, Xiaoyan Signed-off-by: Lu, Yuan Signed-off-by: Chamarthy, Mahati --- src/include/rbd/features.h | 45 ++++++++++++++++++++++++-------------- src/librbd/Features.cc | 3 ++- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/include/rbd/features.h b/src/include/rbd/features.h index 06b5cd06471..80f96107890 100644 --- a/src/include/rbd/features.h +++ b/src/include/rbd/features.h @@ -1,10 +1,13 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + #ifndef CEPH_RBD_FEATURES_H #define CEPH_RBD_FEATURES_H -#define RBD_FEATURE_LAYERING (1ULL<<0) -#define RBD_FEATURE_STRIPINGV2 (1ULL<<1) -#define RBD_FEATURE_EXCLUSIVE_LOCK (1ULL<<2) -#define RBD_FEATURE_OBJECT_MAP (1ULL<<3) +#define RBD_FEATURE_LAYERING (1ULL<<0) +#define RBD_FEATURE_STRIPINGV2 (1ULL<<1) +#define RBD_FEATURE_EXCLUSIVE_LOCK (1ULL<<2) +#define RBD_FEATURE_OBJECT_MAP (1ULL<<3) #define RBD_FEATURE_FAST_DIFF (1ULL<<4) #define RBD_FEATURE_DEEP_FLATTEN (1ULL<<5) #define RBD_FEATURE_JOURNALING (1ULL<<6) @@ -12,6 +15,7 @@ #define RBD_FEATURE_OPERATIONS (1ULL<<8) #define RBD_FEATURE_MIGRATING (1ULL<<9) #define RBD_FEATURE_NON_PRIMARY (1ULL<<10) +#define RBD_FEATURE_DIRTY_CACHE (1ULL<<11) #define RBD_FEATURES_DEFAULT (RBD_FEATURE_LAYERING | \ RBD_FEATURE_EXCLUSIVE_LOCK | \ @@ -30,17 +34,19 @@ #define RBD_FEATURE_NAME_OPERATIONS "operations" #define RBD_FEATURE_NAME_MIGRATING "migrating" #define RBD_FEATURE_NAME_NON_PRIMARY "non-primary" +#define RBD_FEATURE_NAME_DIRTY_CACHE "dirty-cache" /// features that make an image inaccessible for read or write by /// clients that don't understand them -#define RBD_FEATURES_INCOMPATIBLE (RBD_FEATURE_LAYERING | \ - RBD_FEATURE_STRIPINGV2 | \ - RBD_FEATURE_DATA_POOL) +#define RBD_FEATURES_INCOMPATIBLE (RBD_FEATURE_LAYERING | \ + RBD_FEATURE_STRIPINGV2 | \ + RBD_FEATURE_DATA_POOL | \ + RBD_FEATURE_DIRTY_CACHE) /// features that make an image unwritable by clients that don't understand them -#define RBD_FEATURES_RW_INCOMPATIBLE (RBD_FEATURES_INCOMPATIBLE | \ - RBD_FEATURE_EXCLUSIVE_LOCK | \ - RBD_FEATURE_OBJECT_MAP | \ +#define RBD_FEATURES_RW_INCOMPATIBLE (RBD_FEATURES_INCOMPATIBLE | \ + RBD_FEATURE_EXCLUSIVE_LOCK | \ + RBD_FEATURE_OBJECT_MAP | \ RBD_FEATURE_FAST_DIFF | \ RBD_FEATURE_DEEP_FLATTEN | \ RBD_FEATURE_JOURNALING | \ @@ -48,9 +54,9 @@ RBD_FEATURE_MIGRATING | \ RBD_FEATURE_NON_PRIMARY) -#define RBD_FEATURES_ALL (RBD_FEATURE_LAYERING | \ - RBD_FEATURE_STRIPINGV2 | \ - RBD_FEATURE_EXCLUSIVE_LOCK | \ +#define RBD_FEATURES_ALL (RBD_FEATURE_LAYERING | \ + RBD_FEATURE_STRIPINGV2 | \ + RBD_FEATURE_EXCLUSIVE_LOCK | \ RBD_FEATURE_OBJECT_MAP | \ RBD_FEATURE_FAST_DIFF | \ RBD_FEATURE_DEEP_FLATTEN | \ @@ -58,15 +64,19 @@ RBD_FEATURE_DATA_POOL | \ RBD_FEATURE_OPERATIONS | \ RBD_FEATURE_MIGRATING | \ - RBD_FEATURE_NON_PRIMARY) + RBD_FEATURE_NON_PRIMARY | \ + RBD_FEATURE_DIRTY_CACHE) /// 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_NON_PRIMARY) -#define RBD_FEATURES_MUTABLE_INTERNAL (RBD_FEATURE_NON_PRIMARY) + RBD_FEATURE_NON_PRIMARY | \ + RBD_FEATURE_DIRTY_CACHE) + +#define RBD_FEATURES_MUTABLE_INTERNAL (RBD_FEATURE_NON_PRIMARY | \ + RBD_FEATURE_DIRTY_CACHE) /// features that may be dynamically disabled #define RBD_FEATURES_DISABLE_ONLY (RBD_FEATURE_DEEP_FLATTEN) @@ -76,7 +86,8 @@ #define RBD_FEATURES_SINGLE_CLIENT (RBD_FEATURE_EXCLUSIVE_LOCK | \ RBD_FEATURE_OBJECT_MAP | \ RBD_FEATURE_FAST_DIFF | \ - RBD_FEATURE_JOURNALING) + RBD_FEATURE_JOURNALING | \ + RBD_FEATURE_DIRTY_CACHE) /// features that will be implicitly enabled #define RBD_FEATURES_IMPLICIT_ENABLE (RBD_FEATURE_STRIPINGV2 | \ diff --git a/src/librbd/Features.cc b/src/librbd/Features.cc index 1531a2eab4d..9da5b1dc42d 100644 --- a/src/librbd/Features.cc +++ b/src/librbd/Features.cc @@ -22,8 +22,9 @@ static const std::map RBD_FEATURE_MAP = { {RBD_FEATURE_NAME_OPERATIONS, RBD_FEATURE_OPERATIONS}, {RBD_FEATURE_NAME_MIGRATING, RBD_FEATURE_MIGRATING}, {RBD_FEATURE_NAME_NON_PRIMARY, RBD_FEATURE_NON_PRIMARY}, + {RBD_FEATURE_NAME_DIRTY_CACHE, RBD_FEATURE_DIRTY_CACHE}, }; -static_assert((RBD_FEATURE_NON_PRIMARY << 1) > RBD_FEATURES_ALL, +static_assert((RBD_FEATURE_DIRTY_CACHE << 1) > RBD_FEATURES_ALL, "new RBD feature added"); -- 2.39.5