in->snaprealm = get_snap_realm(realm);
in->snaprealm->inodes_with_caps.push_back(&in->snaprealm_item);
ldout(cct, 15) << __func__ << " first one, opened snaprealm " << in->snaprealm << dendl;
+ } else {
+ assert(in->snaprealm);
+ if ((flags & CEPH_CAP_FLAG_AUTH) &&
+ realm != inodeno_t(-1) && in->snaprealm->ino != realm) {
+ in->snaprealm_item.remove_myself();
+ auto oldrealm = in->snaprealm;
+ in->snaprealm = get_snap_realm(realm);
+ in->snaprealm->inodes_with_caps.push_back(&in->snaprealm_item);
+ put_snap_realm(oldrealm);
+ }
}
mds_rank_t mds = mds_session->mds_num;