From: Yan, Zheng Date: Wed, 27 Dec 2017 03:57:57 +0000 (+0800) Subject: client: fix incorrect snaprealm when adding caps X-Git-Tag: v13.1.0~413^2~16 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c00ee8b743daca32438ea7bf396ff1d9bb7ef8f8;p=ceph.git client: fix incorrect snaprealm when adding caps Signed-off-by: "Yan, Zheng" --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 18235bfbce08..8c25ae468fda 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -3834,6 +3834,16 @@ void Client::add_update_cap(Inode *in, MetaSession *mds_session, uint64_t cap_id 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;