dout(7) << "wrlock_force on " << *lock
<< " on " << *lock->get_parent() << dendl;
lock->get_wrlock(true);
- mut->emplace_lock(lock, MutationImpl::LockOp::WRLOCK);
+ auto it = mut->emplace_lock(lock, MutationImpl::LockOp::WRLOCK);
+ it->flags |= MutationImpl::LockOp::WRLOCK; // may already remote_wrlocked
}
bool Locker::wrlock_try(SimpleLock *lock, const MutationRef& mut, client_t client)
in && in->issued_caps_need_gather(lock))) { // xlocker does not hold shared cap
lock->set_state(LOCK_XLOCK);
lock->get_xlock(mut, client);
- mut->emplace_lock(lock, MutationImpl::LockOp::XLOCK);
+ auto it = mut->emplace_lock(lock, MutationImpl::LockOp::XLOCK);
+ ceph_assert(it->is_xlock());
mut->finish_locking(lock);
return true;
}
// forcefully take a wrlock
lock->get_wrlock(true);
- mut->emplace_lock(lock, MutationImpl::LockOp::WRLOCK);
+ auto it = mut->emplace_lock(lock, MutationImpl::LockOp::WRLOCK);
+ ceph_assert(it->is_wrlock());
in->pre_cow_old_inode(); // avoid cow mayhem
}
lock->get_xlock(mut, mut->get_client());
- mut->emplace_lock(lock, MutationImpl::LockOp::XLOCK);
+ auto it = mut->emplace_lock(lock, MutationImpl::LockOp::XLOCK);
+ ceph_assert(it->is_xlock());
return true;
}