From: Yan, Zheng Date: Wed, 17 Dec 2014 06:06:05 +0000 (+0800) Subject: mds: fix CInode::remove_need_snapflush X-Git-Tag: v0.93~87^2~28 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dbf09af9df2b4dd7b05df9b4616485d02814e406;p=ceph.git mds: fix CInode::remove_need_snapflush make sure client and snapid exist, then drop CInode::PIN_NEEDSNAPFLUSH Signed-off-by: Yan, Zheng --- diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index e0e176034d2f..50c829b8a8c4 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()) {