goto ack;
}
+ /* want more caps from mds? */
+ if (wanted & ~(cap->wanted | cap->issued))
+ goto ack;
+
if (!revoking && unmounting && (cap_used == 0))
goto ack;
{
int mds = session->mds_num;
int used = in->caps_used();
+ int wanted = in->caps_wanted();
const int old_caps = cap->issued;
const int new_caps = m->get_caps();
}
}
+ bool check = false;
+ if (m->get_op() == CEPH_CAP_OP_IMPORT && m->get_wanted() != wanted) {
+ check = true;
+
check_cap_issue(in, cap, issued);
// update caps
// waitin' for flush
} else {
cap->wanted = 0; // don't let check_caps skip sending a response to MDS
- check_caps(in, true);
+ check = true;
}
} else if (old_caps == new_caps) {
cap->implemented |= new_caps;
}
+ if (check)
+ check_caps(in, true);
+
// wake up waiters
if (new_caps)
signal_cond_list(in->waitfor_caps);