From: Jason Dillaman Date: Fri, 18 Dec 2020 14:55:30 +0000 (-0500) Subject: librbd/image: mask out all implicit features when creating an image X-Git-Tag: v16.1.0~196^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f52f78caca6f9743e75c8289771375f5f582300a;p=ceph.git librbd/image: mask out all implicit features when creating an image 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 --- diff --git a/src/librbd/image/CreateRequest.cc b/src/librbd/image/CreateRequest.cc index f3ab967d1c28..ac0db55ae76b 100644 --- a/src/librbd/image/CreateRequest.cc +++ b/src/librbd/image/CreateRequest.cc @@ -158,6 +158,7 @@ CreateRequest::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::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 << ", "