Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / tests / multiop.c
index 8772224..e906af6 100755 (executable)
@@ -16,8 +16,8 @@
  * in the LICENSE file that accompanied this code).
  *
  * You should have received a copy of the GNU General Public License
- * version 2 along with this program; If not, see [sun.com URL with a
- * copy of GPLv2].
+ * 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
@@ -47,6 +47,7 @@
 #include <signal.h>
 #include <stdlib.h>
 #include <unistd.h>
+#include <libcfs/libcfs.h>
 #include <lustre/liblustreapi.h>
 
 #define T1 "write data before unlink\n"
@@ -56,7 +57,7 @@ char *buf, *buf_align;
 int bufsize = 0;
 #define ALIGN 65535
 
-char usage[] = 
+char usage[] =
 "Usage: %s filename command-sequence\n"
 "    command-sequence items:\n"
 "        c  close\n"
@@ -78,6 +79,7 @@ char usage[] =
 "        T[num] ftruncate [optional position, default 0]\n"
 "        u  unlink\n"
 "        U  munmap\n"
+"        v  verbose\n"
 "        w[num] write optional length\n"
 "        W  write entire mmap-ed region\n"
 "        y  fsync\n"
@@ -185,6 +187,7 @@ int main(int argc, char **argv)
                 exit(1);
         }
 
+        memset(&st, 0, sizeof(st));
         signal(SIGUSR1, usr1_handler);
 
         fname = argv[1];
@@ -263,6 +266,11 @@ int main(int argc, char **argv)
                         }
                         break;
                 case 'M':
+                        if (st.st_size == 0) {
+                                fprintf(stderr, "mmap without preceeding stat, or on"
+                                        " zero length file.\n");
+                                exit(-1);
+                        }
                         mmap_len = st.st_size;
                         mmap_ptr = mmap(NULL, mmap_len, PROT_WRITE | PROT_READ,
                                         MAP_SHARED, fd, 0);
@@ -326,6 +334,8 @@ int main(int argc, char **argv)
                                         fprintf(stderr, "short read: %u/%u\n",
                                                 rc, len);
                                 len -= rc;
+                                if (verbose >= 2)
+                                        printf("%.*s\n", rc, buf_align);
                         }
                         break;
                 case 'R':
@@ -377,7 +387,7 @@ int main(int argc, char **argv)
                         }
                         break;
                 case 'v':
-                        verbose = 1;
+                        verbose++;
                         break;
                 case 'w':
                         len = atoi(commands+1);