summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
Diffstat (limited to 'xlators')
-rw-r--r--xlators/cluster/dht/src/dht-common.c13
-rw-r--r--xlators/performance/readdir-ahead/src/readdir-ahead-messages.h3
-rw-r--r--xlators/performance/readdir-ahead/src/readdir-ahead.c17
-rw-r--r--xlators/performance/readdir-ahead/src/readdir-ahead.h1
4 files changed, 33 insertions, 1 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
index 27a7eef7c10..31bea00d203 100644
--- a/xlators/cluster/dht/src/dht-common.c
+++ b/xlators/cluster/dht/src/dht-common.c
@@ -4860,6 +4860,7 @@ dht_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,
dht_conf_t *conf = NULL;
int op_errno = -1;
int i = -1;
+ int ret = 0;
VALIDATE_OR_GOTO (frame, err);
VALIDATE_OR_GOTO (this, err);
@@ -4891,6 +4892,18 @@ dht_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,
} else {
local->call_cnt = conf->local_subvols_cnt;
for (i = 0; i < conf->local_subvols_cnt; i++) {
+ if (conf->readdir_optimize == _gf_true) {
+ if (conf->local_subvols[i] != local->first_up_subvol)
+ ret = dict_set_int32 (local->xattr,
+ GF_READDIR_SKIP_DIRS, 1);
+ if (ret)
+ gf_msg (this->name, GF_LOG_ERROR, 0,
+ DHT_MSG_DICT_SET_FAILED,
+ "Failed to set dictionary"
+ " value :key = %s, ret:%d",
+ GF_READDIR_SKIP_DIRS, ret);
+
+ }
STACK_WIND_COOKIE (frame, dht_fd_cbk,
conf->local_subvols[i],
conf->local_subvols[i],
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 {