diff options
Diffstat (limited to 'xlators/performance')
3 files changed, 20 insertions, 1 deletions
diff --git a/xlators/performance/readdir-ahead/src/readdir-ahead-messages.h b/xlators/performance/readdir-ahead/src/readdir-ahead-messages.h index 0e19348b954..0a21bac61f3 100644 --- a/xlators/performance/readdir-ahead/src/readdir-ahead-messages.h +++ b/xlators/performance/readdir-ahead/src/readdir-ahead-messages.h @@ -40,7 +40,7 @@   */  #define GLFS_READDIR_AHEAD_BASE                   GLFS_MSGID_COMP_READDIR_AHEAD -#define GLFS_READDIR_AHEAD_NUM_MESSAGES           5 +#define GLFS_READDIR_AHEAD_NUM_MESSAGES           6  #define GLFS_MSGID_END          (GLFS_READDIR_AHEAD_BASE +\          GLFS_READDIR_AHEAD_NUM_MESSAGES + 1) @@ -97,6 +97,7 @@  #define READDIR_AHEAD_MSG_OUT_OF_SEQUENCE        (GLFS_READDIR_AHEAD_BASE + 5) +#define READDIR_AHEAD_MSG_DICT_OP_FAILED        (GLFS_READDIR_AHEAD_BASE + 6)  /*------------*/  #define glfs_msg_end_x GLFS_MSGID_END, "Invalid: End of messages" diff --git a/xlators/performance/readdir-ahead/src/readdir-ahead.c b/xlators/performance/readdir-ahead/src/readdir-ahead.c index dcbab534226..17569c2a089 100644 --- a/xlators/performance/readdir-ahead/src/readdir-ahead.c +++ b/xlators/performance/readdir-ahead/src/readdir-ahead.c @@ -407,6 +407,7 @@ rda_fill_fd(call_frame_t *frame, xlator_t *this, fd_t *fd)  	struct rda_fd_ctx *ctx;  	off_t offset;  	struct rda_priv *priv = this->private; +        int ret = 0;  	ctx = get_rda_fd_ctx(fd, this);  	if (!ctx) @@ -452,6 +453,15 @@ rda_fill_fd(call_frame_t *frame, xlator_t *this, fd_t *fd)  	}  	local->offset = offset; +        if (local->skip_dir) { +                ret = dict_set_int32 (ctx->xattrs, GF_READDIR_SKIP_DIRS, 1); +                if (ret < 0) { +                        gf_msg (this->name, GF_LOG_ERROR, +                                0, READDIR_AHEAD_MSG_DICT_OP_FAILED, +                                "Dict set of key:%s failed with :%d", +                                GF_READDIR_SKIP_DIRS, ret); +                } +        }  	UNLOCK(&ctx->lock); @@ -558,6 +568,13 @@ rda_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,                  }                  local->xattrs = xdata_from_req; +                ret = dict_get_int32 (xdata, GF_READDIR_SKIP_DIRS, &local->skip_dir); +                if (ret < 0) { +                        gf_msg (this->name, GF_LOG_ERROR, +                                0, READDIR_AHEAD_MSG_DICT_OP_FAILED, +                                "Dict get of key:%s failed with :%d", +                                GF_READDIR_SKIP_DIRS, ret); +                }                  frame->local = local;          } diff --git a/xlators/performance/readdir-ahead/src/readdir-ahead.h b/xlators/performance/readdir-ahead/src/readdir-ahead.h index 6b65a6250cc..9f9df05212e 100644 --- a/xlators/performance/readdir-ahead/src/readdir-ahead.h +++ b/xlators/performance/readdir-ahead/src/readdir-ahead.h @@ -37,6 +37,7 @@ struct rda_local {  	fd_t *fd;  	off_t offset;          dict_t *xattrs;      /* md-cache keys to be sent in readdirp() */ +        int32_t skip_dir;  };  struct rda_priv {  | 
