]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: fix skipped dentry on readdir chunk boundaries
authorSage Weil <sage@newdream.net>
Thu, 21 Oct 2010 23:15:52 +0000 (16:15 -0700)
committerSage Weil <sage@newdream.net>
Thu, 21 Oct 2010 23:15:52 +0000 (16:15 -0700)
The at_cache_name is the last name successfully passed to the caller.

Signed-off-by: Sage Weil <sage@newdream.net>
src/client/Client.cc

index e62c9378d6623c4a5ae8ca8f4603997db2efcc22..2db0322cdbf1fdea95e962cf1c0654d680fe6b1f 100644 (file)
@@ -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;
   }