summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/bugs/shard/bug-1342298.t23
-rw-r--r--xlators/features/shard/src/shard.c15
2 files changed, 24 insertions, 14 deletions
diff --git a/tests/bugs/shard/bug-1342298.t b/tests/bugs/shard/bug-1342298.t
new file mode 100644
index 0000000..ecd7720
--- /dev/null
+++ b/tests/bugs/shard/bug-1342298.t
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+. $(dirname $0)/../../include.rc
+
+cleanup;
+
+TEST glusterd
+TEST pidof glusterd
+TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{0,1}
+TEST $CLI volume set $V0 performance.quick-read off
+TEST $CLI volume set $V0 performance.io-cache off
+TEST $CLI volume set $V0 performance.write-behind off
+TEST $CLI volume set $V0 performance.stat-prefetch off
+TEST $CLI volume set $V0 performance.read-ahead off
+TEST $CLI volume set $V0 performance.open-behind off
+TEST $CLI volume set $V0 features.shard on
+TEST $CLI volume start $V0
+
+TEST $GFS --volfile-id=$V0 --volfile-server=$H0 $M0
+echo a > $M0/a
+TEST dd if=$M0/a of=/dev/null bs=4096 count=1 iflag=direct
+
+cleanup;
diff --git a/xlators/features/shard/src/shard.c b/xlators/features/shard/src/shard.c
index df84124..d3e8ba3 100644
--- a/xlators/features/shard/src/shard.c
+++ b/xlators/features/shard/src/shard.c
@@ -3314,8 +3314,6 @@ int
shard_post_lookup_readv_handler (call_frame_t *frame, xlator_t *this)
{
int ret = 0;
- size_t read_size = 0;
- size_t actual_size = 0;
struct iobuf *iobuf = NULL;
shard_local_t *local = NULL;
shard_priv_t *priv = NULL;
@@ -3350,21 +3348,10 @@ shard_post_lookup_readv_handler (call_frame_t *frame, xlator_t *this)
return 0;
}
- read_size = (local->offset + local->req_size);
- actual_size = local->prebuf.ia_size;
-
local->first_block = get_lowest_block (local->offset,
local->block_size);
- /* If the end of read surpasses the file size, only resolve and read
- * till the end of the file size. If the read is confined within the
- * size of the file, read only the requested size.
- */
-
- if (read_size >= actual_size)
- local->total_size = actual_size - local->offset;
- else
- local->total_size = local->req_size;
+ local->total_size = local->req_size;
local->last_block = get_highest_block (local->offset, local->total_size,
local->block_size);