Whamcloud - gitweb
LU-12472 tests: update sanity-krb5.sh
[fs/lustre-release.git] / lustre / tests / mmap_sanity.c
index 09d35b6..90a2edb 100644 (file)
@@ -23,7 +23,7 @@
  * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2012, 2015, Intel Corporation.
+ * Copyright (c) 2012, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -748,6 +748,56 @@ out:
         return rc;
 }
 
+static int mmap_tst9(char *mnt)
+{
+        char  fname[256];
+        char *buf = MAP_FAILED;
+        int fd = -1;
+        int rc = 0;
+
+       if (snprintf(fname, 256, "%s/mmap_tst9", mnt) >= 256) {
+               fprintf(stderr, "dir name too long\n");
+               rc = -ENAMETOOLONG;
+               goto out;
+       }
+       if (unlink(fname) == -1 && errno != ENOENT) {
+               perror("unlink");
+               rc = -errno;
+               goto out;
+       }
+       fd = open(fname, O_RDWR | O_CREAT, 0644);
+       if (fd == -1) {
+               perror("open");
+               rc = -errno;
+               goto out;
+        }
+       buf = mmap(NULL, page_size * 2,
+                  PROT_READ , MAP_PRIVATE, fd, (loff_t)(-10 * page_size));
+       if (buf == MAP_FAILED) {
+               perror("mmap");
+               rc = -errno;
+               goto out;
+       }
+       rc = write(STDOUT_FILENO, buf, 2 * page_size);
+       if (rc != -1) {
+               fprintf(stderr, "write succeded with %d instead of failing\n", rc);
+               rc = -EINVAL;
+               goto out;
+       } else if (errno != EFAULT) {
+               fprintf(stderr, "write failed with %d instead of EFAULT(%d)\n",
+                       errno, EFAULT);
+               rc = -errno;
+               goto out;
+       }
+       rc = 0;
+out:
+       if (buf != MAP_FAILED)
+               munmap(buf, page_size * 2);
+       if (fd != -1)
+               close(fd);
+       return rc;
+}
+
 static int remote_tst(int tc, char *mnt)
 {
         int rc = 0;
@@ -775,18 +825,68 @@ struct test_case {
 };
 
 struct test_case tests[] = {
-        { 1, "mmap test1: basic mmap operation", mmap_tst1, 1 },
-        { 2, "mmap test2: MAP_PRIVATE not write back", mmap_tst2, 1 },
-        { 3, "mmap test3: concurrent mmap ops on two nodes", mmap_tst3, 2 },
-        { 4, "mmap test4: c1 write to f1 from mmapped f2, "
-             "c2 write to f1 from mmapped f1", mmap_tst4, 2 },
-        { 5, "mmap test5: read/write file to/from the buffer "
-             "which mmapped to just this file", mmap_tst5, 1 },
-        { 6, "mmap test6: check mmap write/read content on two nodes",
-                mmap_tst6, 2 },
-        { 7, "mmap test7: file i/o with an unmapped buffer", mmap_tst7, 1},
-        { 8, "mmap test8: SIGBUS for beyond file size", mmap_tst8, 1 },
-        { 0, NULL, 0, 0 }
+       {
+               .tc             = 1,
+               .desc           = "mmap test1: basic mmap operation",
+               .test_fn        = mmap_tst1,
+               .node_cnt       = 1
+       },
+       {
+               .tc             = 2,
+               .desc           = "mmap test2: MAP_PRIVATE not write back",
+               .test_fn        = mmap_tst2,
+               .node_cnt       = 1
+       },
+       {
+               .tc             = 3,
+               .desc           = "mmap test3: concurrent mmap ops on "
+                                 "two nodes",
+               .test_fn        = mmap_tst3,
+               .node_cnt       = 2
+       },
+       {
+               .tc             = 4,
+               .desc           = "mmap test4: c1 write to f1 from mmapped f2, "
+                                 "c2 write to f1 from mmapped f1",
+               .test_fn        = mmap_tst4,
+               .node_cnt       = 2
+       },
+       {
+               .tc             = 5,
+               .desc           = "mmap test5: read/write file to/from the "
+                                 "buffer which mmapped to just this file",
+               .test_fn        = mmap_tst5,
+               .node_cnt       = 1
+       },
+       {
+               .tc             = 6,
+               .desc           = "mmap test6: check mmap write/read content "
+                                 "on two nodes",
+               .test_fn        = mmap_tst6,
+               .node_cnt       = 2
+       },
+       {
+               .tc             = 7,
+               .desc           = "mmap test7: file i/o with an unmapped "
+                                 "buffer",
+               .test_fn        = mmap_tst7,
+               .node_cnt       = 1
+       },
+       {
+               .tc             = 8,
+               .desc           = "mmap test8: SIGBUS for beyond file size",
+               .test_fn        = mmap_tst8,
+               .node_cnt       = 1
+       },
+       {
+               .tc             = 9,
+               .desc           = "mmap test9: SIGBUS for negative file offset",
+               .test_fn        = mmap_tst9,
+               .node_cnt       = 1
+       },
+       {
+               .tc             = 0
+       }
 };
 
 int main(int argc, char **argv)