return;
}
+ // do not update on-disk flags if not image owner
+ if (m_image_ctx.image_watcher->is_lock_supported(m_image_ctx.snap_lock) &&
+ !m_image_ctx.image_watcher->is_lock_owner()) {
+ return;
+ }
+
librados::ObjectWriteOperation op;
+ if (snap_id == CEPH_NOSNAP) {
+ m_image_ctx.image_watcher->assert_header_locked(&op);
+ }
cls_client::set_flags(&op, snap_id, flags, flags);
r = m_image_ctx.md_ctx.operate(m_image_ctx.header_oid, &op);
- if (r < 0) {
+ if (r == -EBUSY) {
+ ldout(cct, 5) << "skipping on-disk object map invalidation: "
+ << "image not locked by client" << dendl;
+ } else if (r < 0) {
lderr(cct) << "failed to invalidate on-disk object map: " << cpp_strerror(r)
<< dendl;
}
m_image_ctx.flags |= flags;
librados::ObjectWriteOperation op;
+ m_image_ctx.image_watcher->assert_header_locked(&op);
cls_client::set_flags(&op, CEPH_NOSNAP, flags, flags);
librados::AioCompletion *rados_completion = create_callback_completion();