]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd/image: mask out all implicit features when creating an image
authorJason Dillaman <dillaman@redhat.com>
Fri, 18 Dec 2020 14:55:30 +0000 (09:55 -0500)
committerJason Dillaman <dillaman@redhat.com>
Fri, 18 Dec 2020 14:55:30 +0000 (09:55 -0500)
This will ensure that all paths to the create image state machine
properly handle this condition. Previously, it was up to the callers
of the state machine to clear the implicit feature bits.

Fixes: https://tracker.ceph.com/issues/48647
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/image/CreateRequest.cc

index f3ab967d1c28b0f6aace85489f27dd917141c686..ac0db55ae76bfd1bcb92fc8f5a4ea699948d7d71 100644 (file)
@@ -158,6 +158,7 @@ CreateRequest<I>::CreateRequest(const ConfigProxy& config, IoCtx &ioctx,
   m_features |= features_set;
   m_features &= ~features_clear;
 
+  m_features &= ~RBD_FEATURES_IMPLICIT_ENABLE;
   if ((m_features & RBD_FEATURE_OBJECT_MAP) == RBD_FEATURE_OBJECT_MAP) {
       m_features |= RBD_FEATURE_FAST_DIFF;
   }
@@ -203,14 +204,11 @@ CreateRequest<I>::CreateRequest(const ConfigProxy& config, IoCtx &ioctx,
     m_features |= RBD_FEATURE_DATA_POOL;
   } else {
     m_data_pool.clear();
-    m_features &= ~RBD_FEATURE_DATA_POOL;
   }
 
   if ((m_stripe_unit != 0 && m_stripe_unit != (1ULL << m_order)) ||
       (m_stripe_count != 0 && m_stripe_count != 1)) {
     m_features |= RBD_FEATURE_STRIPINGV2;
-  } else {
-    m_features &= ~RBD_FEATURE_STRIPINGV2;
   }
 
   ldout(m_cct, 10) << "name=" << m_image_name << ", "