The caps message may be a revocation ack that is needed to complete
the freeze. In general, though, we back off even if freezing,
since we want to avoid starving the freeze as much as possible.
assert(cap);
// freezing|frozen?
- if (in->is_freezing() || in->is_frozen()) {
+ if ((in->is_freezing() && in->filelock.is_stable()) || // continue if freezing and lock is unstable
+ in->is_frozen()) {
dout(7) << "handle_client_caps freezing|frozen on " << *in << dendl;
in->add_waiter(CInode::WAIT_UNFREEZE, new C_MDS_RetryMessage(mds, m));
return;