From c00ee8b743daca32438ea7bf396ff1d9bb7ef8f8 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Wed, 27 Dec 2017 11:57:57 +0800 Subject: [PATCH] client: fix incorrect snaprealm when adding caps Signed-off-by: "Yan, Zheng" --- src/client/Client.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/client/Client.cc b/src/client/Client.cc index 18235bfbce0..8c25ae468fd 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; -- 2.39.5