summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam C. Emerson <aemerson@linuxbox.com>2013-05-23 19:17:43 -0700
committerDavid Zafman <david.zafman@inktank.com>2013-10-03 15:23:01 -0700
commit9a3a6f3e08a4571ac7af82d964c2aa4a5136e295 (patch)
tree1577fea0ff5213f888330b268ae9fdf754021ec9
parentb01ce1124176697abfb477be3695633b92e1f73f (diff)
downloadceph-9a3a6f3e08a4571ac7af82d964c2aa4a5136e295.tar.gz
client/Client: return 1 from readdir cb on full
This appears to save us a bit of extra work trying to fill up the buffer further than it can be filled. Signed-off-by: Matt Benjamin <matt@linuxbox.com>
-rw-r--r--src/client/Client.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/client/Client.cc b/src/client/Client.cc
index b35830b8594..c7f21914911 100644
--- a/src/client/Client.cc
+++ b/src/client/Client.cc
@@ -5034,6 +5034,8 @@ int Client::_readdir_cache_cb(dir_result_t *dirp, add_dirent_cb_t cb, void *p)
prev_name = dn->name;
dirp->offset = next_off;
+ if (r > 0)
+ return r;
}
ldout(cct, 10) << "_readdir_cache_cb " << dirp << " on " << dirp->inode->ino << " at end" << dendl;
@@ -5082,6 +5084,8 @@ int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p)
dirp->offset = next_off;
off = next_off;
+ if (r > 0)
+ return r;
}
if (dirp->offset == 1) {
ldout(cct, 15) << " including .." << dendl;
@@ -5104,6 +5108,8 @@ int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p)
dirp->offset = 2;
off = 2;
+ if (r > 0)
+ return r;
}
// can we read from our cache?
@@ -5156,6 +5162,8 @@ int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p)
off++;
dirp->offset = pos + 1;
+ if (r > 0)
+ return r;
}
if (dirp->last_name.length()) {
@@ -5225,7 +5233,7 @@ static int _readdir_single_dirent_cb(void *p, struct dirent *de, struct stat *st
if (c->stmask)
*c->stmask = stmask;
c->full = true;
- return 0;
+ return 1;
}
struct dirent *Client::readdir(dir_result_t *d)