summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2013-01-11 15:46:59 +0800
committerYan, Zheng <zheng.z.yan@intel.com>2013-01-28 10:18:15 +0800
commit6bd676ea7914174c9af86894c82ca49117478f2c (patch)
tree53d81de2f1cee0c4413714cb62b0cb4650c1660b
parentfa421cf5f52ca16fa1328dbea2f4bda85c56cd3f (diff)
downloadceph-6bd676ea7914174c9af86894c82ca49117478f2c.tar.gz
mds: fix end check in Server::handle_client_readdir()
commit 1174dd3188 (don't retry readdir request after issuing caps) introduced an bug that wrongly marks 'end' in the the readdir reply. The code that touches existing dentries re-uses an iterator, and the iterator is used for checking if readdir is end. Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
-rw-r--r--src/mds/Server.cc8
1 files changed, 3 insertions, 5 deletions
diff --git a/src/mds/Server.cc b/src/mds/Server.cc
index b70445e9a1d..45eed81c6ac 100644
--- a/src/mds/Server.cc
+++ b/src/mds/Server.cc
@@ -2895,11 +2895,9 @@ void Server::handle_client_readdir(MDRequest *mdr)
continue;
} else {
// touch everything i _do_ have
- for (it = dir->begin();
- it != dir->end();
- it++)
- if (!it->second->get_linkage()->is_null())
- mdcache->lru.lru_touch(it->second);
+ for (CDir::map_t::iterator p = dir->begin(); p != dir->end(); p++)
+ if (!p->second->get_linkage()->is_null())
+ mdcache->lru.lru_touch(p->second);
// already issued caps and leases, reply immediately.
if (dnbl.length() > 0) {