]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd/object_map: make object map in handle_load_object_map() local
authorIlya Dryomov <idryomov@gmail.com>
Thu, 4 Jan 2024 10:44:46 +0000 (11:44 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Sat, 20 Jan 2024 18:00:24 +0000 (19:00 +0100)
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 232ad1a5fb6248d7b3fbfaec5944a90a71a95806)

src/librbd/object_map/DiffRequest.cc
src/librbd/object_map/DiffRequest.h

index 0d33078c173d6913c489bac3fa4412ad2c43d13d..abb5353b0c1867cb675b0fafecfdfcdb1f859805 100644 (file)
@@ -185,13 +185,14 @@ void DiffRequest<I>::handle_load_object_map(int r) {
   auto cct = m_image_ctx->cct;
   ldout(cct, 10) << "r=" << r << dendl;
 
+  BitVector<2> object_map;
+  std::string oid(ObjectMap<>::object_map_name(m_image_ctx->id,
+                                               m_current_snap_id));
+
   if (r == 0) {
     auto bl_it = m_out_bl.cbegin();
-    r = cls_client::object_map_load_finish(&bl_it, &m_object_map);
+    r = cls_client::object_map_load_finish(&bl_it, &object_map);
   }
-
-  std::string oid(ObjectMap<>::object_map_name(m_image_ctx->id,
-                                               m_current_snap_id));
   if (r == -ENOENT && m_ignore_enoent) {
     ldout(cct, 10) << "object map " << oid << " does not exist" << dendl;
 
@@ -207,9 +208,9 @@ void DiffRequest<I>::handle_load_object_map(int r) {
 
   uint64_t num_objs = Striper::get_num_objects(m_image_ctx->layout,
                                                m_current_size);
-  if (m_object_map.size() < num_objs) {
+  if (object_map.size() < num_objs) {
     ldout(cct, 1) << "object map too small: "
-                  << m_object_map.size() << " < " << num_objs << dendl;
+                  << object_map.size() << " < " << num_objs << dendl;
     finish(-EINVAL);
     return;
   }
@@ -237,7 +238,7 @@ void DiffRequest<I>::handle_load_object_map(int r) {
 
   uint64_t overlap = std::min(m_object_diff_state->size(),
                               prev_object_diff_state_size);
-  auto it = m_object_map.begin() + start_object_no;
+  auto it = object_map.begin() + start_object_no;
   auto diff_it = m_object_diff_state->begin();
   uint64_t ono = start_object_no;
   for (; ono < start_object_no + overlap; ++diff_it, ++ono) {
index 6a8ecb9dc93067d0ab29f5ce2cfae4b2808fb70b..84211c6fc4a4842fc296720ae260b465cc205044 100644 (file)
@@ -68,8 +68,6 @@ private:
 
   uint64_t m_current_size = 0;
 
-  BitVector<2> m_object_map;
-
   bufferlist m_out_bl;
 
   bool is_diff_iterate() const;