Whamcloud - gitweb
LU-2446 build: Update Whamcloud copyright messages for Intel
[fs/lustre-release.git] / lustre / tests / mpi / write_disjoint.c
index 9b28d60..77ee332 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.
  * 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/
@@ -77,17 +77,18 @@ void rprintf(int rank, int loop, const char *fmt, ...)
 #define CHUNK_SIZE(n) chunk_size[(n) % 2]
 
 int main (int argc, char *argv[]) {
-        int i, n, fd;
+        int i, n, fd, c;
         unsigned long chunk_size[2];
         int rank, noProcessors, done;
         int error;
         off_t offset;
         char **chunk_buf;
-        char *read_buf, c;
+        char *read_buf;
         struct stat stat_buf;
         ssize_t ret;
         char *filename = "/mnt/lustre/write_disjoint";
         int numloops = 1000;
+        int random = 0;
 
         error = MPI_Init(&argc, &argv);
         if (error != MPI_SUCCESS)
@@ -133,12 +134,23 @@ int main (int argc, char *argv[]) {
                         if (ret != 0)
                                 rprintf(rank, n, "truncate() returned %s\n",
                                         strerror(errno) );
+                        random = rand();
                 }
-                CHUNK_SIZE(n) = rand() % CHUNK_MAX_SIZE;
+                MPI_Bcast(&random, 1, MPI_INT, 0, MPI_COMM_WORLD);
+                CHUNK_SIZE(n) = random % CHUNK_MAX_SIZE;
 
                 if (n % 1000 == 0 && rank == 0)
                         printf("loop %d: chunk_size %lu\n", n, CHUNK_SIZE(n));
 
+                if (stat(filename, &stat_buf) < 0)
+                        rprintf(rank, n, "error stating %s: %s\n",
+                                filename, strerror(errno));
+
+                if (stat_buf.st_size != 0)
+                        rprintf(rank, n, "filesize = %lu. "
+                                "Should be zero after truncate\n",
+                                stat_buf.st_size);
+
                 MPI_Barrier(MPI_COMM_WORLD);
 
                 /* Do the race */
@@ -149,10 +161,11 @@ int main (int argc, char *argv[]) {
                 do {
                         ret = write(fd, chunk_buf[rank] + done,
                                     CHUNK_SIZE(n) - done);
-                        if (ret < 0)
+                        if (ret < 0 && errno != EINTR)
                                 rprintf(rank, n, "write() returned %s\n",
                                         strerror(errno));
-                        done += ret;
+                        if (ret > 0)
+                                done += ret;
                 } while (done != CHUNK_SIZE(n));
 
                 MPI_Barrier(MPI_COMM_WORLD);
@@ -193,7 +206,8 @@ int main (int argc, char *argv[]) {
 
                         for (i = 0; i < noProcessors; i++) {
                                 char command[4096];
-                                int j, rc;
+                                int j;
+                               
                                 if (!memcmp(read_buf + (i * CHUNK_SIZE(n)),
                                             chunk_buf[i], CHUNK_SIZE(n)))
                                         continue;
@@ -218,10 +232,11 @@ int main (int argc, char *argv[]) {
                                 }
 
                                 sprintf(command, "od -Ad -a %s", filename);
-                                rc = system(command);
+                                ret = system(command);
                                 rprintf(0, n, "data check error - exiting\n");
                         }
                 }
+                MPI_Barrier(MPI_COMM_WORLD);
         }
 
         printf("Finished after %d loops\n", n);