summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPoornima G <pgurusid@redhat.com>2017-11-13 12:55:06 +0530
committerjiffin tony Thottan <jthottan@redhat.com>2018-10-10 05:22:52 +0000
commit9cde9d7153d03893b7e6aef3a62320f7b03ced80 (patch)
treee3857bab2a9d6f330a94eb6fd34d3f5fa4d7d5c5
parent9f32a0adc51820948d8e1bd34e1805869bbf2ad2 (diff)
dht: Fill first_up_subvol before use in dht_opendir
Reported by: Sam McLeod Change-Id: Ic8f9b46b173796afd70aff1042834b03ac3e80b2 BUG: 1512371 Signed-off-by: Poornima G <pgurusid@redhat.com>
-rwxr-xr-xtests/bugs/readdir-ahead/bug-1512437.t23
-rw-r--r--xlators/cluster/dht/src/dht-common.c5
2 files changed, 28 insertions, 0 deletions
diff --git a/tests/bugs/readdir-ahead/bug-1512437.t b/tests/bugs/readdir-ahead/bug-1512437.t
new file mode 100755
index 0000000..50eaa7d
--- /dev/null
+++ b/tests/bugs/readdir-ahead/bug-1512437.t
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+. $(dirname $0)/../../include.rc
+. $(dirname $0)/../../volume.rc
+
+cleanup;
+
+TEST glusterd
+
+TEST $CLI volume create $V0 $H0:$B0/${V0}1
+TEST $CLI volume start $V0
+
+TEST $CLI volume set $V0 parallel-readdir on
+TEST $CLI volume set $V0 readdir-optimize on
+
+TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0
+TEST mkdir -p $M0/subdir1/subdir2;
+umount $M0
+TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0
+count=`ls -1 $M0/subdir1 | wc -l`
+TEST [ $count -eq 1 ]
+
+cleanup;
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
index 4138213..1551245 100644
--- a/xlators/cluster/dht/src/dht-common.c
+++ b/xlators/cluster/dht/src/dht-common.c
@@ -5051,6 +5051,7 @@ dht_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,
op_errno = ENOMEM;
goto err;
}
+ local->first_up_subvol = dht_first_up_subvol (this);
if (!xdata) {
xdata = dict_new ();
@@ -5073,6 +5074,10 @@ dht_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,
call_count = local->call_cnt = conf->subvolume_cnt;
subvolumes = conf->subvolumes;
+ /* In case of parallel-readdir, the readdir-ahead will be loaded
+ * below dht, in this case, if we want to enable or disable SKIP_DIRs
+ * it has to be done in opendir, so that prefetching logic in
+ * readdir-ahead, honors it */
for (i = 0; i < call_count; i++) {
if (conf->readdir_optimize == _gf_true) {
if (subvolumes[i] != local->first_up_subvol) {