diff options
Diffstat (limited to 'xlators/cluster/afr/src/afr-dir-read.c')
| -rw-r--r-- | xlators/cluster/afr/src/afr-dir-read.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/xlators/cluster/afr/src/afr-dir-read.c b/xlators/cluster/afr/src/afr-dir-read.c index 689dd84e646..d94cb0ca699 100644 --- a/xlators/cluster/afr/src/afr-dir-read.c +++ b/xlators/cluster/afr/src/afr-dir-read.c @@ -422,14 +422,32 @@ afr_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, int32_t op_errno, gf_dirent_t *entries, dict_t *xdata) { - afr_local_t *local = NULL; + afr_local_t *local = NULL; + gf_dirent_t *entry = NULL; + int par_read_child = (long) cookie; + int32_t read_child = -1; if (op_ret == -1) goto out; local = frame->local; + afr_readdir_filter_trash_dir (entries, local->fd); + list_for_each_entry (entry, &entries->list, list) { + if (entry->inode) { + read_child = -1; + + read_child = afr_inode_get_read_ctx (this, entry->inode, + NULL); + if (read_child != par_read_child) { + inode_unref (entry->inode); + entry->inode = NULL; + continue; + } + } + } + out: AFR_STACK_UNWIND (readdirp, frame, op_ret, op_errno, entries, NULL); return 0; |
