}
void ImageCtx::flush_cache_aio(Context *onfinish) {
+ assert(owner_lock.is_locked());
cache_lock.Lock();
object_cacher->flush_set(object_set, onfinish);
cache_lock.Unlock();
if (ictx->object_cacher) {
// complete pending writes before we're set to a snapshot and
// get -EROFS for writes
- RWLock::WLocker l(ictx->md_lock);
+ RWLock::RLocker owner_locker(ictx->owner_lock);
+ RWLock::WLocker md_locker(ictx->md_lock);
ictx->flush_cache();
}
int r = _snap_set(ictx, snap_name);
return;
}
+ RWLock::RLocker owner_locker(ictx->owner_lock);
ictx->user_flushed();
C_AioWrite *flush_ctx = new C_AioWrite(cct, c);
ictx->flush_async_operations();
- RWLock::WLocker l(ictx->md_lock);
+ RWLock::RLocker owner_locker(ictx->owner_lock);
+ RWLock::WLocker md_locker(ictx->md_lock);
r = ictx->invalidate_cache();
return r;
}