Whamcloud - gitweb
LU-4904 test: write_append_truncate failed with divide error 58/12358/3
authorAndriy Skulysh <Andriy_Skulysh@xyratex.com>
Tue, 21 Oct 2014 07:06:43 +0000 (00:06 -0700)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 1 Dec 2014 04:19:08 +0000 (04:19 +0000)
fix trunc_size calculation in case of append_size == 1
Don't allow to specify write_max and append_max < 2.

This patch is back-ported from the following one:
Lustre-commit: 85b037f5da6a022919783ef9a87ed6d2a4d102d2
Lustre-change: http://review.whamcloud.com/9948

Test-Parameters: alwaysuploadlogs \
envdefinitions=SLOW=yes,ENABLE_QUOTA=yes,ONLY=write_append_truncate \
mdtfilesystemtype=ldiskfs mdsfilesystemtype=ldiskfs ostfilesystemtype=ldiskfs \
mdtcount=4 mdssizegb=2 ostcount=7 ostsizegb=2 \
testlist=parallel-scale

Xyratex-bug-id: MRP-1779

Signed-off-by: Andriy Skulysh <Andriy_Skulysh@xyratex.com>
Change-Id: Ia2cf141b3cc78e4f1488a96fc602b78b16869678
Reviewed-on: http://review.whamcloud.com/12358
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Emoly Liu <emoly.liu@intel.com>
Reviewed-by: Bobi Jam <bobijam@gmail.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/tests/mpi/write_append_truncate.c

index 0fdf0fc..3b53aeb 100644 (file)
@@ -161,7 +161,7 @@ int main(int argc, char *argv[])
                 switch(c) {
                 case 'a':
                         append_max = strtoul(optarg, &end, 0);
-                        if (append_max == 0 || *end) {
+                       if (append_max < 2 || *end) {
                                 fprintf(stderr, "%s: bad append option '%s'\n",
                                         prog, optarg);
                                 usage(prog);
@@ -202,7 +202,7 @@ int main(int argc, char *argv[])
                         break;
                 case 'w':
                         write_max = strtoul(optarg, &end, 0);
-                        if (write_max == 0 || *end) {
+                       if (write_max < 2 || *end) {
                                 fprintf(stderr, "%s: bad write option '%s'\n",
                                         prog, optarg);
                                 usage(prog);
@@ -303,7 +303,8 @@ int main(int argc, char *argv[])
                 if (rank == 0) {
                         write_size = (rand() % (write_max - 1)) + 1;
                         append_size = (rand() % (append_max - 1)) + 1;
-                        trunc_size = (rand() % ((trunc_max?: append_size)-1))+1;
+                       trunc_size = (append_size == 1) ? 1 :
+                                    (rand() % ((trunc_max?: append_size)-1))+1;
                         trunc_offset = write_size + trunc_size;
 
                         if (verbose || n % 1000 == 0)