Whamcloud - gitweb
LU-8788 tests: modify create_pool to use as wrapper
[fs/lustre-release.git] / lustre / tests / mpi / write_append_truncate.c
index bae9ba4..f2c6cb9 100644 (file)
@@ -1,6 +1,4 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
  * GPL HEADER START
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * You should have received a copy of the GNU General Public License
  * version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * GPL HEADER END
  */
 /*
- * Copyright  2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
+ *
+ * Copyright (c) 2012, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -161,7 +157,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 +198,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 +299,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)
@@ -369,15 +366,17 @@ int main(int argc, char *argv[])
                         done = 0;
                         do {
                                 ret = write(fd, write_buf+done,write_size-done);
-                                if (verbose > 1 || ret <= 0) {
-                                        rprintf(rank, n, ret <= 0,
+                                if (verbose > 1 || ret < 0) {
+                                        rprintf(rank, n,
+                                                ret < 0 && errno != EINTR,
                                                 "write %d/%d @ %d: %s\n",
                                                 ret + done, write_size, done,
                                                 strerror(errno));
-                                        if (ret <= 0)
+                                        if (ret < 0 && errno != EINTR)
                                                 break;
                                 }
-                                done += ret;
+                                if (ret > 0)
+                                        done += ret;
                         } while (done != write_size);
                 }
 
@@ -396,17 +395,19 @@ int main(int argc, char *argv[])
                                 ret = write(fd, append_buf + done,
                                             append_size - done);
                                 if (ret < 0) {
-                                        rprintf(rank, n, ret < 0,
+                                        rprintf(rank, n, errno != EINTR,
                                                 "append %u/%u: %s\n",
                                                 ret + done, append_size,
                                                 strerror(errno));
-                                        break;
+                                        if (errno != EINTR)
+                                                break;
                                 } else if (verbose > 1 || ret != append_size) {
                                         rprintf(rank, n, ret != append_size,
                                                 "append %u/%u\n",
                                                 ret + done, append_size);
                                 }
-                                done += ret;
+                                if (ret > 0)
+                                        done += ret;
                         } while (done != append_size);
                 } else if (rank == trunc_rank) {
                         /* XXX: truncating the same file descriptor as the
@@ -530,7 +531,7 @@ int main(int argc, char *argv[])
                                         trunc_offset, trunc_offset);
 
                                 sprintf(command, "od -Ax -a %s", fnames[0]);
-                                system(command);
+                                ret = system(command);
                                 MPI_Abort(MPI_COMM_WORLD, 1);
                         }
                 }