From: Sage Weil Date: Thu, 21 Oct 2010 23:15:52 +0000 (-0700) Subject: client: fix skipped dentry on readdir chunk boundaries X-Git-Tag: v0.23~149 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0abf57b6bb3b639d106e45f6e6aa24b7898190f3;p=ceph.git client: fix skipped dentry on readdir chunk boundaries The at_cache_name is the last name successfully passed to the caller. Signed-off-by: Sage Weil --- diff --git a/src/client/Client.cc b/src/client/Client.cc index e62c9378d662..2db0322cdbf1 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -4059,6 +4059,7 @@ int Client::_readdir_cache_cb(DirResult *dirp, add_dirent_cb_t cb, void *p) pd = dir->dentry_map.begin(); } + string prev_name; while (pd != dir->dentry_map.end()) { Dentry *dn = pd->second; if (dn->inode == NULL) { @@ -4083,10 +4084,11 @@ int Client::_readdir_cache_cb(DirResult *dirp, add_dirent_cb_t cb, void *p) << dendl; if (r < 0) { dirp->next_offset = dn->offset; - dirp->at_cache_name = dn->name; + dirp->at_cache_name = prev_name; return r; } + prev_name = dn->name; dirp->offset = next_off; }