Every caller was acquiring this just for these calls.
Signed-off-by: Josh Durgin <jdurgin@redhat.com>
snap_name = in_snap_name;
snap_exists = true;
data_ctx.snap_set_read(snap_id);
-
- RWLock::WLocker l(object_map_lock);
object_map.refresh(in_snap_id);
return 0;
}
snap_name = "";
snap_exists = true;
data_ctx.snap_set_read(snap_id);
-
- RWLock::WLocker l(object_map_lock);
object_map.refresh(CEPH_NOSNAP);
}
return r;
}
RWLock::RLocker l2(m_image_ctx.snap_lock);
- RWLock::WLocker l3(m_image_ctx.object_map_lock);
m_image_ctx.object_map.refresh(CEPH_NOSNAP);
}
void ObjectMap::refresh(uint64_t snap_id)
{
assert(m_image_ctx.snap_lock.is_locked());
- assert(m_image_ctx.object_map_lock.is_wlocked());
+ RWLock::WLocker l(m_image_ctx.object_map_lock);
+
uint64_t features;
m_image_ctx.get_features(snap_id, &features);
if ((features & RBD_FEATURE_OBJECT_MAP) == 0 ||
ictx->snap_exists = false;
}
- RWLock::WLocker object_map_locker(ictx->object_map_lock);
ictx->object_map.refresh(ictx->snap_id);
ictx->data_ctx.selfmanaged_snap_set_write_ctx(ictx->snapc.seq, ictx->snaps);