From 7e0b572e29a62f372d092de9d7375ff8e8235c46 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Fri, 18 Dec 2020 09:55:30 -0500 Subject: [PATCH] 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 (cherry picked from commit f52f78caca6f9743e75c8289771375f5f582300a) --- src/librbd/image/CreateRequest.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/librbd/image/CreateRequest.cc b/src/librbd/image/CreateRequest.cc index 386f53f64c9..f4064205d1b 100644 --- a/src/librbd/image/CreateRequest.cc +++ b/src/librbd/image/CreateRequest.cc @@ -155,6 +155,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; } @@ -200,14 +201,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 << ", " -- 2.47.3