]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd/OSD: maybe_share_map() use scope guard
authorMatan Breizman <mbreizma@redhat.com>
Thu, 15 Jun 2023 15:12:27 +0000 (15:12 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Thu, 15 Jun 2023 15:12:27 +0000 (15:12 +0000)
Signed-off-by: Matan Breizman <mbreizma@redhat.com>
src/osd/OSD.cc

index 6db41bd609c0d6a0a79bbc1dc3de7674967750f5..7487653d558410a1a0ed44d269bee200bf60fbc3 100644 (file)
@@ -7293,27 +7293,29 @@ void OSDService::maybe_share_map(
 
   // assume the peer has the newer of the op's sent_epoch and what
   // we think we sent them.
-  session->projected_epoch_lock.lock();
-  if (peer_epoch_lb > session->projected_epoch) {
-    dout(10) << __func__ << " con " << con
-            << " " << con->get_peer_addr()
-            << " map epoch " << session->projected_epoch
-            << " -> " << peer_epoch_lb << " (as per caller)" << dendl;
-    session->projected_epoch = peer_epoch_lb;
-  }
+  epoch_t send_from = 0;
+  {
+    std::lock_guard l(session->projected_epoch_lock);
 
-  if (osdmap->get_epoch() <= session->projected_epoch) {
-    session->projected_epoch_lock.unlock();
-    return;
-  }
+    if (peer_epoch_lb > session->projected_epoch) {
+      dout(10) << __func__ << " con " << con
+        << " " << con->get_peer_addr()
+        << " map epoch " << session->projected_epoch
+        << " -> " << peer_epoch_lb << " (as per caller)" << dendl;
+      session->projected_epoch = peer_epoch_lb;
+    }
 
-  const epoch_t send_from = session->projected_epoch;
+    if (osdmap->get_epoch() <= session->projected_epoch) {
+      return;
+    }
+
+    send_from = session->projected_epoch;
     dout(10) << __func__ << " con " << con
-            << " " << con->get_peer_addr()
-            << " map epoch " << session->projected_epoch
-            << " -> " << osdmap->get_epoch() << " (shared)" << dendl;
-  session->projected_epoch = osdmap->get_epoch();
-  session->projected_epoch_lock.unlock();
+      << " " << con->get_peer_addr()
+      << " map epoch " << session->projected_epoch
+      << " -> " << osdmap->get_epoch() << " (shared)" << dendl;
+    session->projected_epoch = osdmap->get_epoch();
+  }
   send_incremental_map(send_from, con, osdmap);
 }