handle following sequence of events:
- mds0 exports an inode to mds1. client receives the cap import
message from mds1. caps from mds0 are removed while handling
the cap import message.
- mds1 exports an inode to mds0. client receives the cap export
message from mds1. handle_cap_export() adds placeholder caps
for mds0
- client receives the first cap export message (for exporting
inode from mds0 to mds1)
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
ldout(cct, 5) << "handle_cap_export ino " << m->get_ino() << " mseq " << m->get_mseq()
<< " EXPORT from mds." << mds << dendl;
- if (in->caps.count(mds)) {
- Cap *cap = in->caps[mds];
+ Cap *cap = NULL;
+ if (in->caps.count(mds))
+ cap = in->caps[mds];
+ if (cap && cap->cap_id == m->get_cap_id()) {
if (m->peer.cap_id) {
MetaSession *tsession = _get_or_open_mds_session(m->peer.mds);
if (in->caps.count(m->peer.mds)) {