LOCK_MIX is is a transition state for muti MDSs could do read/write
at the same time, but the Fcb caps are not allowed.
When the Fsc caps are issued, the lock state should be excl.
Fixes: https://tracker.ceph.com/issues/45935
Signed-off-by: Xiubo Li <xiubli@redhat.com>
} else if (lock->get_state() != LOCK_MIX) {
if (issued & (CEPH_CAP_GEXCL | CEPH_CAP_GBUFFER))
lock->set_state(LOCK_EXCL);
- else if (issued & CEPH_CAP_GWR)
- lock->set_state(LOCK_MIX);
- else if (lock->is_dirty()) {
+ else if (issued & CEPH_CAP_GWR) {
+ if (issued & (CEPH_CAP_GCACHE | CEPH_CAP_GSHARED))
+ lock->set_state(LOCK_EXCL);
+ else
+ lock->set_state(LOCK_MIX);
+ } else if (lock->is_dirty()) {
if (is_replicated())
lock->set_state(LOCK_MIX);
else