diff options
Diffstat (limited to 'xlators/cluster/dht/src/dht-common.c')
| -rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 23 | 
1 files changed, 23 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index 5b57552c3..fbe18959a 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -2858,6 +2858,16 @@ done:                          goto unwind;                  } +		if (conf->readdir_optimize == _gf_true) { +                        if (next_subvol != dht_first_up_subvol (this)) { +                                ret = dict_set_int32 (local->xattr, +                                                      GF_READDIR_SKIP_DIRS, 1); +                                if (ret) +                                        gf_log (this->name, GF_LOG_ERROR, +					         "dict set failed"); +		        } +                } +                  STACK_WIND (frame, dht_readdirp_cbk,                              next_subvol, next_subvol->fops->readdirp,                              local->fd, local->size, next_offset, @@ -2983,11 +2993,14 @@ dht_do_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,          xlator_t     *xvol = NULL;          off_t         xoff = 0;          int           ret = 0; +        dht_conf_t   *conf = NULL;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); +        conf = this->private; +          local = dht_local_init (frame, NULL, NULL, whichop);          if (!local) {                  op_errno = ENOMEM; @@ -3015,6 +3028,16 @@ dht_do_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,                                  gf_log (this->name, GF_LOG_WARNING,                                          "failed to set 'glusterfs.dht.linkto'"                                          " key"); +			if (conf->readdir_optimize == _gf_true) { +                                if (xvol != dht_first_up_subvol (this)) { +				        ret = dict_set_int32 (local->xattr, +			                               GF_READDIR_SKIP_DIRS, 1); +				        if (ret) +					        gf_log (this->name, +                                                        GF_LOG_ERROR, +						        "Dict set failed"); +                                } +			}                  }                  STACK_WIND (frame, dht_readdirp_cbk, xvol, xvol->fops->readdirp,  | 
