{
unsigned wanted = in->caps_wanted();
unsigned used = in->caps_used();
+ unsigned cap_used;
int retain = wanted | CEPH_CAP_PIN;
if (!unmounting) {
MetaSession *session = mds_sessions[mds];
assert(session);
+ cap_used = used;
+ if (in->auth_cap && cap != in->auth_cap)
+ cap_used &= ~in->auth_cap->issued;
+
int revoking = cap->implemented & ~cap->issued;
ldout(cct, 10) << " cap mds." << mds
}
/* completed revocation? */
- if (revoking && (revoking & used) == 0) {
+ if (revoking && (revoking & cap_used) == 0) {
ldout(cct, 10) << "completed revocation of " << ccap_string(cap->implemented & ~cap->issued) << dendl;
goto ack;
}
- if (!revoking && unmounting && (used == 0))
+ if (!revoking && unmounting && (cap_used == 0))
goto ack;
if (wanted == cap->wanted && // mds knows what we want.
else
flushing = 0;
- send_cap(in, session, cap, used, wanted, retain, flushing);
+ send_cap(in, session, cap, cap_used, wanted, retain, flushing);
}
}