From dbf09af9df2b4dd7b05df9b4616485d02814e406 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Wed, 17 Dec 2014 14:06:05 +0800 Subject: [PATCH] mds: fix CInode::remove_need_snapflush make sure client and snapid exist, then drop CInode::PIN_NEEDSNAPFLUSH Signed-off-by: Yan, Zheng --- src/mds/CInode.cc | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index e0e176034d2f4..50c829b8a8c4f 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -278,10 +278,18 @@ void CInode::add_need_snapflush(CInode *snapin, snapid_t snapid, client_t client void CInode::remove_need_snapflush(CInode *snapin, snapid_t snapid, client_t client) { dout(10) << "remove_need_snapflush client." << client << " snapid " << snapid << " on " << snapin << dendl; - set& clients = client_need_snapflush[snapid]; - clients.erase(client); - if (clients.empty()) { - client_need_snapflush.erase(snapid); + map >::iterator p = client_need_snapflush.find(snapid); + if (p == client_need_snapflush.end()) { + dout(10) << " snapid not found" << dendl; + return; + } + if (!p->second.count(client)) { + dout(10) << " client not found" << dendl; + return; + } + p->second.erase(client); + if (p->second.empty()) { + client_need_snapflush.erase(p); snapin->auth_unpin(this); if (client_need_snapflush.empty()) { -- 2.39.5