Merge pull request #17992 from dillaman/wip-21558

librbd: hold cache_lock while clearing cache nonexistence flags

Reviewed-by: Mykola Golub <to.my.trociny@gmail.com>
This commit is contained in:
Mykola Golub 2017-10-01 12:26:28 +03:00 committed by GitHub
commit 2665d4448e
2 changed files with 4 additions and 2 deletions

View File

@ -69,12 +69,13 @@ void RefreshParentRequest<I>::send() {
template <typename I>
void RefreshParentRequest<I>::apply() {
assert(m_child_image_ctx.cache_lock.is_locked());
assert(m_child_image_ctx.snap_lock.is_wlocked());
assert(m_child_image_ctx.parent_lock.is_wlocked());
if (m_child_image_ctx.parent != nullptr) {
// closing parent image
m_child_image_ctx.clear_nonexistence_cache();
}
assert(m_child_image_ctx.snap_lock.is_wlocked());
assert(m_child_image_ctx.parent_lock.is_wlocked());
std::swap(m_child_image_ctx.parent, m_parent_image_ctx);
}

View File

@ -326,6 +326,7 @@ int SetSnapRequest<I>::apply() {
ldout(cct, 10) << __func__ << dendl;
RWLock::WLocker owner_locker(m_image_ctx.owner_lock);
Mutex::Locker cache_locker(m_image_ctx.cache_lock);
RWLock::WLocker snap_locker(m_image_ctx.snap_lock);
RWLock::WLocker parent_locker(m_image_ctx.parent_lock);
if (m_snap_id != CEPH_NOSNAP) {