summaryrefslogtreecommitdiffstats
path: root/xlators/performance/readdir-ahead/src/readdir-ahead.c
diff options
context:
space:
mode:
authorPoornima G <pgurusid@redhat.com>2016-12-06 16:31:51 +0530
committerRaghavendra G <rgowdapp@redhat.com>2017-01-05 20:27:50 -0800
commitf60631904defdaec2f1bae84b3cfd6a3e083cf09 (patch)
tree9726a8933ae60efd8b438fb2f478c9f80bc2fbfd /xlators/performance/readdir-ahead/src/readdir-ahead.c
parentaa053b228e01ab079f86d24f3444b2389895effd (diff)
readdir-ahead: Enhance EOD detection logic
Issue: Currently end of directory is identified on obtaining a readdirp_cbk with op_ret = 0 (i.e. 0 entries fetched in readdirp). Thus an extra readdirp is required for every directory just to identify EOD. Consider a case of listing large number of small directories. The readdirp fops required are doubled in that case. Solution: On reaching the EOD, posix sets the op_errno to ENOENT, hence along with looking for 'op_ret == 0' we also look for 'operrno == ENOENT' ehile checking for EOD condition Change-Id: I7a5b52e7b98f5dc236c387635fcc651dac0171b3 BUG: 1401812 Signed-off-by: Poornima G <pgurusid@redhat.com> Reviewed-on: http://review.gluster.org/16042 NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Smoke: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Diffstat (limited to 'xlators/performance/readdir-ahead/src/readdir-ahead.c')
-rw-r--r--xlators/performance/readdir-ahead/src/readdir-ahead.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/xlators/performance/readdir-ahead/src/readdir-ahead.c b/xlators/performance/readdir-ahead/src/readdir-ahead.c
index 4b57a8b1c3f..38507a13668 100644
--- a/xlators/performance/readdir-ahead/src/readdir-ahead.c
+++ b/xlators/performance/readdir-ahead/src/readdir-ahead.c
@@ -322,7 +322,7 @@ rda_fill_fd_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
if (ctx->cur_size >= priv->rda_high_wmark)
ctx->state &= ~RDA_FD_PLUGGED;
- if (!op_ret) {
+ if (!op_ret || op_errno == ENOENT) {
/* we've hit eod */
ctx->state &= ~RDA_FD_RUNNING;
ctx->state |= RDA_FD_EOD;