]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/operation/SnapshotCreateRequest.cc
update sources to 12.2.10
[ceph.git] / ceph / src / librbd / operation / SnapshotCreateRequest.cc
index 63ddd8848c4d38ec785745fe045a2a20a223fe00..2208dedbf6733400d3e4d32f2dfeee2885c32325 100644 (file)
@@ -208,12 +208,11 @@ template <typename I>
 Context *SnapshotCreateRequest<I>::send_create_object_map() {
   I &image_ctx = this->m_image_ctx;
 
-  update_snap_context();
-
   image_ctx.snap_lock.get_read();
   if (image_ctx.object_map == nullptr || m_skip_object_map) {
     image_ctx.snap_lock.put_read();
 
+    update_snap_context();
     image_ctx.io_work_queue->unblock_writes();
     return this->create_context_finisher(0);
   }
@@ -238,9 +237,14 @@ Context *SnapshotCreateRequest<I>::handle_create_object_map(int *result) {
   CephContext *cct = image_ctx.cct;
   ldout(cct, 5) << this << " " << __func__ << ": r=" << *result << dendl;
 
-  assert(*result == 0);
-
+  update_snap_context();
   image_ctx.io_work_queue->unblock_writes();
+  if (*result < 0) {
+    lderr(cct) << this << " " << __func__ << ": failed to snapshot object map: "
+               << cpp_strerror(*result) << dendl;
+    return this->create_context_finisher(*result);
+  }
+
   return this->create_context_finisher(0);
 }