From: LiuYangkuan Date: Mon, 11 Jun 2018 15:51:16 +0000 (-0400) Subject: client: fix bug #24491 _ll_drop_pins may access invalid iterator X-Git-Tag: v12.2.8~97^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0255ef3e9601abacb7db7b9a41fae228ff35e90c;p=ceph.git client: fix bug #24491 _ll_drop_pins may access invalid iterator Fixes: https://tracker.ceph.com/issues/24491 Signed-off-by: Liu Yangkuan (cherry picked from commit 97188fef8596f098aa43aa745a217b40a6c29ea4) Conflicts: src/client/Client.cc: Resolved in _ll_drop_pins for ldout --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 41eff1b4b2a..70b0f16f0fd 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -10431,6 +10431,7 @@ int Client::_ll_put(Inode *in, int num) void Client::_ll_drop_pins() { ldout(cct, 10) << "_ll_drop_pins" << dendl; + std::set to_be_put; //this set will be deconstructed item by item when exit ceph::unordered_map::iterator next; for (ceph::unordered_map::iterator it = inode_map.begin(); it != inode_map.end(); @@ -10438,8 +10439,10 @@ void Client::_ll_drop_pins() Inode *in = it->second; next = it; ++next; - if (in->ll_ref) + if (in->ll_ref){ + to_be_put.insert(in); _ll_put(in, in->ll_ref); + } } }