* [LTP] [PATCH v2] Skip some dio/fcntl cases on NFS
[not found] <1732727369.18779125.1407818184641.JavaMail.zimbra@redhat.com>
@ 2014-08-12 4:37 ` Xiong Zhou
2014-08-20 1:23 ` Xiong Zhou
2014-08-20 11:59 ` Stanislav Kholmanskikh
0 siblings, 2 replies; 4+ messages in thread
From: Xiong Zhou @ 2014-08-12 4:37 UTC (permalink / raw)
To: ltp-list
According to description of NFS and directIO in open(2), especially
"The Linux NFS client places no alignment restrictions on
O_DIRECT I/O", ignore "odd count"/"non-aligned" read-write FAILs
in diotest4. Some dup code clean up btw.
According to nfs(5), NLM supports advisory file locks only. So skip
fcntl16 test if NFS.
Signed-off-by: Xiong Zhou <xzhou@redhat.com>
---
testcases/kernel/io/direct_io/diotest4.c | 148 ++++++++++++++----------------
testcases/kernel/syscalls/fcntl/fcntl16.c | 8 ++
2 files changed, 79 insertions(+), 77 deletions(-)
diff --git a/testcases/kernel/io/direct_io/diotest4.c b/testcases/kernel/io/direct_io/diotest4.c
index 10281bf..934d5b1 100644
--- a/testcases/kernel/io/direct_io/diotest4.c
+++ b/testcases/kernel/io/direct_io/diotest4.c
@@ -71,9 +71,11 @@
#include "test.h"
#include "usctest.h"
+#include "tst_fs_type.h"
char *TCID = "diotest4"; /* Test program identifier. */
int TST_TOTAL = 17; /* Total number of test conditions */
+int NO_NFS = 1; /* Test on NFS or not */
#ifdef O_DIRECT
@@ -171,6 +173,16 @@ void prg_usage()
exit(1);
}
+static void testcheck_end(int ret, int *failed, int *fail_count, char *msg)
+{
+ if (ret != 0) {
+ *failed = TRUE;
+ *fail_count++;
+ tst_resm(TFAIL, msg);
+ } else
+ tst_resm(TPASS, msg);
+}
+
static void setup(void);
static void cleanup(void);
static int fd1 = -1;
@@ -206,6 +218,10 @@ int main(int argc, char *argv[])
setup();
+ /* On NFS or not */
+ if (tst_fs_type(cleanup, ".") == TST_NFS_MAGIC)
+ NO_NFS = 0;
+
/* Open file and fill, allocate for buffer */
if ((fd = open(filename, O_DIRECT | O_RDWR | O_CREAT, 0666)) < 0) {
tst_brkm(TBROK, cleanup, "open failed for %s: %s",
@@ -251,17 +267,41 @@ int main(int argc, char *argv[])
/* Test-3: Odd count of read and write */
offset = 0;
count = 1;
+ l_fail = 0;
lseek(fd, 0, SEEK_SET);
if (write(fd, buf2, 4096) == -1) {
tst_resm(TFAIL, "can't write to file %d", ret);
}
- ret = runtest_f(fd, buf2, offset, count, EINVAL, 3, "odd count");
- if (ret != 0) {
- failed = TRUE;
- fail_count++;
- tst_resm(TFAIL, "Odd count of read and write");
- } else
- tst_resm(TPASS, "Odd count of read and write");
+ if (lseek(fd, offset, SEEK_SET) < 0) {
+ if (errno != EINVAL) {
+ tst_resm(TFAIL, "lseek before read failed: %s",
+ strerror(errno));
+ l_fail = TRUE;
+ }
+ } else {
+ ret = read(fd, buf2, count);
+ if ((ret >= 0 || errno != EINVAL) && NO_NFS) {
+ tst_resm(TFAIL, "read allows %s. returns %d: %s",
+ "odd count", ret, strerror(errno));
+ l_fail = TRUE;
+ }
+ }
+ if (lseek(fd, offset, SEEK_SET) < 0) {
+ if (errno != EINVAL) {
+ tst_resm(TFAIL, "lseek before write failed: %s",
+ strerror(errno));
+ l_fail = TRUE;
+ }
+ } else {
+ ret = write(fd, buf2, count);
+ if ((ret >= 0 || errno != EINVAL) && NO_NFS) {
+ tst_resm(TFAIL, "write allows %s.returns %d: %s",
+ "odd count", ret, strerror(errno));
+ l_fail = TRUE;
+ }
+ }
+ testcheck_end(l_fail, &failed, &fail_count,
+ "Odd count of read and write");
total++;
/* Test-4: Read beyond the file size */
@@ -290,12 +330,7 @@ int main(int argc, char *argv[])
count = bufsize;
newfd = -1;
ret = runtest_f(newfd, buf2, offset, count, EBADF, 5, "negative fd");
- if (ret != 0) {
- failed = TRUE;
- fail_count++;
- tst_resm(TFAIL, "Invalid file descriptor");
- } else
- tst_resm(TPASS, "Invalid file descriptor");
+ testcheck_end(ret, &failed, &fail_count, "Invalid file descriptor");
total++;
/* Test-6: Out of range file descriptor */
@@ -306,15 +341,10 @@ int main(int argc, char *argv[])
failed = TRUE;
tst_resm(TFAIL, "Out of range file descriptor");
} else {
- ret =
- runtest_f(newfd, buf2, offset, count, EBADF, 6,
+ ret = runtest_f(newfd, buf2, offset, count, EBADF, 6,
"out of range fd");
- if (ret != 0) {
- failed = TRUE;
- fail_count++;
- tst_resm(TFAIL, "Out of range file descriptor");
- } else
- tst_resm(TPASS, "Out of range file descriptor");
+ testcheck_end(ret, &failed, &fail_count,
+ "Out of range file descriptor");
}
close(newfd);
total++;
@@ -327,12 +357,7 @@ int main(int argc, char *argv[])
strerror(errno));
}
ret = runtest_f(fd, buf2, offset, count, EBADF, 7, "closed fd");
- if (ret != 0) {
- failed = TRUE;
- fail_count++;
- tst_resm(TFAIL, "Closed file descriptor");
- } else
- tst_resm(TPASS, "Closed file descriptor");
+ testcheck_end(ret, &failed, &fail_count, "Closed file descriptor");
total++;
/* Test-9: removed */
@@ -345,12 +370,8 @@ int main(int argc, char *argv[])
tst_resm(TCONF, "Direct I/O on /dev/null is not supported");
} else {
ret = runtest_s(newfd, buf2, offset, count, 9, "/dev/null");
- if (ret != 0) {
- failed = TRUE;
- fail_count++;
- tst_resm(TFAIL, "character device read, write");
- } else
- tst_resm(TPASS, "character device read, write");
+ testcheck_end(ret, &failed, &fail_count,
+ "character device read, write");
}
close(newfd);
total++;
@@ -373,12 +394,8 @@ int main(int argc, char *argv[])
strerror(errno));
}
ret = runtest_s(fd, buf2, offset, count, 10, "mmapped file");
- if (ret != 0) {
- failed = TRUE;
- fail_count++;
- tst_resm(TFAIL, "read, write to a mmaped file");
- } else
- tst_resm(TPASS, "read, write to a mmaped file");
+ testcheck_end(ret, &failed, &fail_count,
+ "read, write to a mmaped file");
total++;
/* Test-11: read, write to an unmaped file with munmap */
@@ -387,12 +404,8 @@ int main(int argc, char *argv[])
strerror(errno));
}
ret = runtest_s(fd, buf2, offset, count, 11, "unmapped file");
- if (ret != 0) {
- failed = TRUE;
- fail_count++;
- tst_resm(TFAIL, "read, write to an unmapped file");
- } else
- tst_resm(TPASS, "read, write to an unmapped file");
+ testcheck_end(ret, &failed, &fail_count,
+ "read, write to an unmapped file");
close(fd);
total++;
@@ -459,7 +472,7 @@ int main(int argc, char *argv[])
strerror(errno));
l_fail = TRUE;
} else {
- if ((ret = read(fd, buf2 + 1, count)) != -1) {
+ if (((ret = read(fd, buf2 + 1, count)) != -1) && NO_NFS) {
tst_resm(TFAIL,
"allows read nonaligned buf. returns %d: %s",
ret, strerror(errno));
@@ -471,19 +484,15 @@ int main(int argc, char *argv[])
strerror(errno));
l_fail = TRUE;
} else {
- if ((ret = write(fd, buf2 + 1, count)) != -1) {
+ if (((ret = write(fd, buf2 + 1, count)) != -1) && NO_NFS) {
tst_resm(TFAIL,
"allows write nonaligned buf. returns %d: %s",
ret, strerror(errno));
l_fail = TRUE;
}
}
- if (l_fail) {
- failed = TRUE;
- fail_count++;
- tst_resm(TFAIL, "read, write with non-aligned buffer");
- } else
- tst_resm(TPASS, "read, write with non-aligned buffer");
+ testcheck_end(l_fail, &failed, &fail_count,
+ "read, write with non-aligned buffer");
total++;
close(fd);
@@ -500,8 +509,7 @@ int main(int argc, char *argv[])
strerror(errno));
l_fail = TRUE;
} else {
- ret =
- read(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
+ ret = read(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
count);
if (ret >= 0 || errno != EFAULT) {
tst_resm(TFAIL,
@@ -515,8 +523,7 @@ int main(int argc, char *argv[])
strerror(errno));
l_fail = TRUE;
} else {
- ret =
- write(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
+ ret = write(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
count);
if (ret < 0) {
tst_resm(TFAIL,
@@ -525,12 +532,8 @@ int main(int argc, char *argv[])
l_fail = TRUE;
}
}
- if (l_fail) {
- failed = TRUE;
- fail_count++;
- tst_resm(TFAIL, "read, write buffer in read-only space");
- } else
- tst_resm(TPASS, "read, write buffer in read-only space");
+ testcheck_end(l_fail, &failed, &fail_count,
+ "read, write buffer in read-only space");
close(fd);
total++;
@@ -545,15 +548,10 @@ int main(int argc, char *argv[])
tst_brkm(TBROK | TERRNO, cleanup,
"open(%s, O_DIRECT|O_RDWR) failed", filename);
}
- ret =
- runtest_f(fd, buf1, offset, count, EFAULT, 16,
+ ret = runtest_f(fd, buf1, offset, count, EFAULT, 16,
" nonexistant space");
- if (ret != 0) {
- failed = TRUE;
- fail_count++;
- tst_resm(TFAIL, "read, write in non-existant space");
- } else
- tst_resm(TPASS, "read, write in non-existant space");
+ testcheck_end(ret, &failed, &fail_count,
+ "read, write in non-existant space");
total++;
close(fd);
@@ -565,12 +563,8 @@ int main(int argc, char *argv[])
"open(%s, O_DIRECT|O_RDWR|O_SYNC failed)", filename);
}
ret = runtest_s(fd, buf2, offset, count, 17, "opened with O_SYNC");
- if (ret != 0) {
- failed = TRUE;
- fail_count++;
- tst_resm(TFAIL, "read, write for file with O_SYNC");
- } else
- tst_resm(TPASS, "read, write for file with O_SYNC");
+ testcheck_end(ret, &failed, &fail_count,
+ "read, write for file with O_SYNC");
total++;
close(fd);
diff --git a/testcases/kernel/syscalls/fcntl/fcntl16.c b/testcases/kernel/syscalls/fcntl/fcntl16.c
index 44b6a80..7dba6ea 100644
--- a/testcases/kernel/syscalls/fcntl/fcntl16.c
+++ b/testcases/kernel/syscalls/fcntl/fcntl16.c
@@ -51,6 +51,8 @@
#include <sys/types.h>
#include <sys/wait.h>
+#include "tst_fs_type.h"
+
#define SKIPVAL 0x0f00
//#define SKIP SKIPVAL, 0, 0L, 0L, IGNORED
#define SKIP 0,0,0L,0L,0
@@ -412,6 +414,12 @@ void setup(void)
tst_tmpdir();
+ /* On NFS or not */
+ if (tst_fs_type(cleanup, ".") == TST_NFS_MAGIC) {
+ tst_brkm(TCONF, cleanup, "Cannot test madatory locking "
+ "on a file located on an NFS filesystem");
+ }
+
/* set up temp filename */
sprintf(tmpname, "fcntl4.%d", parent);
--
1.8.3.1
------------------------------------------------------------------------------
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [LTP] [PATCH v2] Skip some dio/fcntl cases on NFS
2014-08-12 4:37 ` [LTP] [PATCH v2] Skip some dio/fcntl cases on NFS Xiong Zhou
@ 2014-08-20 1:23 ` Xiong Zhou
2014-08-20 11:59 ` Stanislav Kholmanskikh
1 sibling, 0 replies; 4+ messages in thread
From: Xiong Zhou @ 2014-08-20 1:23 UTC (permalink / raw)
To: ltp-list
Ping.
Thanks,
xzhou
----- Original Message -----
> From: "Xiong Zhou" <xzhou@redhat.com>
> To: ltp-list@lists.sourceforge.net
> Sent: Tuesday, August 12, 2014 12:37:18 PM
> Subject: [LTP] [PATCH v2] Skip some dio/fcntl cases on NFS
>
>
> According to description of NFS and directIO in open(2), especially
> "The Linux NFS client places no alignment restrictions on
> O_DIRECT I/O", ignore "odd count"/"non-aligned" read-write FAILs
> in diotest4. Some dup code clean up btw.
>
> According to nfs(5), NLM supports advisory file locks only. So skip
> fcntl16 test if NFS.
>
> Signed-off-by: Xiong Zhou <xzhou@redhat.com>
> ---
> testcases/kernel/io/direct_io/diotest4.c | 148
> ++++++++++++++----------------
> testcases/kernel/syscalls/fcntl/fcntl16.c | 8 ++
> 2 files changed, 79 insertions(+), 77 deletions(-)
>
> diff --git a/testcases/kernel/io/direct_io/diotest4.c
> b/testcases/kernel/io/direct_io/diotest4.c
> index 10281bf..934d5b1 100644
> --- a/testcases/kernel/io/direct_io/diotest4.c
> +++ b/testcases/kernel/io/direct_io/diotest4.c
> @@ -71,9 +71,11 @@
>
> #include "test.h"
> #include "usctest.h"
> +#include "tst_fs_type.h"
>
> char *TCID = "diotest4"; /* Test program identifier. */
> int TST_TOTAL = 17; /* Total number of test conditions */
> +int NO_NFS = 1; /* Test on NFS or not */
>
> #ifdef O_DIRECT
>
> @@ -171,6 +173,16 @@ void prg_usage()
> exit(1);
> }
>
> +static void testcheck_end(int ret, int *failed, int *fail_count, char *msg)
> +{
> + if (ret != 0) {
> + *failed = TRUE;
> + *fail_count++;
> + tst_resm(TFAIL, msg);
> + } else
> + tst_resm(TPASS, msg);
> +}
> +
> static void setup(void);
> static void cleanup(void);
> static int fd1 = -1;
> @@ -206,6 +218,10 @@ int main(int argc, char *argv[])
>
> setup();
>
> + /* On NFS or not */
> + if (tst_fs_type(cleanup, ".") == TST_NFS_MAGIC)
> + NO_NFS = 0;
> +
> /* Open file and fill, allocate for buffer */
> if ((fd = open(filename, O_DIRECT | O_RDWR | O_CREAT, 0666)) < 0) {
> tst_brkm(TBROK, cleanup, "open failed for %s: %s",
> @@ -251,17 +267,41 @@ int main(int argc, char *argv[])
> /* Test-3: Odd count of read and write */
> offset = 0;
> count = 1;
> + l_fail = 0;
> lseek(fd, 0, SEEK_SET);
> if (write(fd, buf2, 4096) == -1) {
> tst_resm(TFAIL, "can't write to file %d", ret);
> }
> - ret = runtest_f(fd, buf2, offset, count, EINVAL, 3, "odd count");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "Odd count of read and write");
> - } else
> - tst_resm(TPASS, "Odd count of read and write");
> + if (lseek(fd, offset, SEEK_SET) < 0) {
> + if (errno != EINVAL) {
> + tst_resm(TFAIL, "lseek before read failed: %s",
> + strerror(errno));
> + l_fail = TRUE;
> + }
> + } else {
> + ret = read(fd, buf2, count);
> + if ((ret >= 0 || errno != EINVAL) && NO_NFS) {
> + tst_resm(TFAIL, "read allows %s. returns %d: %s",
> + "odd count", ret, strerror(errno));
> + l_fail = TRUE;
> + }
> + }
> + if (lseek(fd, offset, SEEK_SET) < 0) {
> + if (errno != EINVAL) {
> + tst_resm(TFAIL, "lseek before write failed: %s",
> + strerror(errno));
> + l_fail = TRUE;
> + }
> + } else {
> + ret = write(fd, buf2, count);
> + if ((ret >= 0 || errno != EINVAL) && NO_NFS) {
> + tst_resm(TFAIL, "write allows %s.returns %d: %s",
> + "odd count", ret, strerror(errno));
> + l_fail = TRUE;
> + }
> + }
> + testcheck_end(l_fail, &failed, &fail_count,
> + "Odd count of read and write");
> total++;
>
> /* Test-4: Read beyond the file size */
> @@ -290,12 +330,7 @@ int main(int argc, char *argv[])
> count = bufsize;
> newfd = -1;
> ret = runtest_f(newfd, buf2, offset, count, EBADF, 5, "negative fd");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "Invalid file descriptor");
> - } else
> - tst_resm(TPASS, "Invalid file descriptor");
> + testcheck_end(ret, &failed, &fail_count, "Invalid file descriptor");
> total++;
>
> /* Test-6: Out of range file descriptor */
> @@ -306,15 +341,10 @@ int main(int argc, char *argv[])
> failed = TRUE;
> tst_resm(TFAIL, "Out of range file descriptor");
> } else {
> - ret =
> - runtest_f(newfd, buf2, offset, count, EBADF, 6,
> + ret = runtest_f(newfd, buf2, offset, count, EBADF, 6,
> "out of range fd");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "Out of range file descriptor");
> - } else
> - tst_resm(TPASS, "Out of range file descriptor");
> + testcheck_end(ret, &failed, &fail_count,
> + "Out of range file descriptor");
> }
> close(newfd);
> total++;
> @@ -327,12 +357,7 @@ int main(int argc, char *argv[])
> strerror(errno));
> }
> ret = runtest_f(fd, buf2, offset, count, EBADF, 7, "closed fd");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "Closed file descriptor");
> - } else
> - tst_resm(TPASS, "Closed file descriptor");
> + testcheck_end(ret, &failed, &fail_count, "Closed file descriptor");
> total++;
>
> /* Test-9: removed */
> @@ -345,12 +370,8 @@ int main(int argc, char *argv[])
> tst_resm(TCONF, "Direct I/O on /dev/null is not supported");
> } else {
> ret = runtest_s(newfd, buf2, offset, count, 9, "/dev/null");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "character device read, write");
> - } else
> - tst_resm(TPASS, "character device read, write");
> + testcheck_end(ret, &failed, &fail_count,
> + "character device read, write");
> }
> close(newfd);
> total++;
> @@ -373,12 +394,8 @@ int main(int argc, char *argv[])
> strerror(errno));
> }
> ret = runtest_s(fd, buf2, offset, count, 10, "mmapped file");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "read, write to a mmaped file");
> - } else
> - tst_resm(TPASS, "read, write to a mmaped file");
> + testcheck_end(ret, &failed, &fail_count,
> + "read, write to a mmaped file");
> total++;
>
> /* Test-11: read, write to an unmaped file with munmap */
> @@ -387,12 +404,8 @@ int main(int argc, char *argv[])
> strerror(errno));
> }
> ret = runtest_s(fd, buf2, offset, count, 11, "unmapped file");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "read, write to an unmapped file");
> - } else
> - tst_resm(TPASS, "read, write to an unmapped file");
> + testcheck_end(ret, &failed, &fail_count,
> + "read, write to an unmapped file");
> close(fd);
> total++;
>
> @@ -459,7 +472,7 @@ int main(int argc, char *argv[])
> strerror(errno));
> l_fail = TRUE;
> } else {
> - if ((ret = read(fd, buf2 + 1, count)) != -1) {
> + if (((ret = read(fd, buf2 + 1, count)) != -1) && NO_NFS) {
> tst_resm(TFAIL,
> "allows read nonaligned buf. returns %d: %s",
> ret, strerror(errno));
> @@ -471,19 +484,15 @@ int main(int argc, char *argv[])
> strerror(errno));
> l_fail = TRUE;
> } else {
> - if ((ret = write(fd, buf2 + 1, count)) != -1) {
> + if (((ret = write(fd, buf2 + 1, count)) != -1) && NO_NFS) {
> tst_resm(TFAIL,
> "allows write nonaligned buf. returns %d: %s",
> ret, strerror(errno));
> l_fail = TRUE;
> }
> }
> - if (l_fail) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "read, write with non-aligned buffer");
> - } else
> - tst_resm(TPASS, "read, write with non-aligned buffer");
> + testcheck_end(l_fail, &failed, &fail_count,
> + "read, write with non-aligned buffer");
> total++;
> close(fd);
>
> @@ -500,8 +509,7 @@ int main(int argc, char *argv[])
> strerror(errno));
> l_fail = TRUE;
> } else {
> - ret =
> - read(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
> + ret = read(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
> count);
> if (ret >= 0 || errno != EFAULT) {
> tst_resm(TFAIL,
> @@ -515,8 +523,7 @@ int main(int argc, char *argv[])
> strerror(errno));
> l_fail = TRUE;
> } else {
> - ret =
> - write(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
> + ret = write(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
> count);
> if (ret < 0) {
> tst_resm(TFAIL,
> @@ -525,12 +532,8 @@ int main(int argc, char *argv[])
> l_fail = TRUE;
> }
> }
> - if (l_fail) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "read, write buffer in read-only space");
> - } else
> - tst_resm(TPASS, "read, write buffer in read-only space");
> + testcheck_end(l_fail, &failed, &fail_count,
> + "read, write buffer in read-only space");
> close(fd);
> total++;
>
> @@ -545,15 +548,10 @@ int main(int argc, char *argv[])
> tst_brkm(TBROK | TERRNO, cleanup,
> "open(%s, O_DIRECT|O_RDWR) failed", filename);
> }
> - ret =
> - runtest_f(fd, buf1, offset, count, EFAULT, 16,
> + ret = runtest_f(fd, buf1, offset, count, EFAULT, 16,
> " nonexistant space");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "read, write in non-existant space");
> - } else
> - tst_resm(TPASS, "read, write in non-existant space");
> + testcheck_end(ret, &failed, &fail_count,
> + "read, write in non-existant space");
> total++;
> close(fd);
>
> @@ -565,12 +563,8 @@ int main(int argc, char *argv[])
> "open(%s, O_DIRECT|O_RDWR|O_SYNC failed)", filename);
> }
> ret = runtest_s(fd, buf2, offset, count, 17, "opened with O_SYNC");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "read, write for file with O_SYNC");
> - } else
> - tst_resm(TPASS, "read, write for file with O_SYNC");
> + testcheck_end(ret, &failed, &fail_count,
> + "read, write for file with O_SYNC");
> total++;
> close(fd);
>
> diff --git a/testcases/kernel/syscalls/fcntl/fcntl16.c
> b/testcases/kernel/syscalls/fcntl/fcntl16.c
> index 44b6a80..7dba6ea 100644
> --- a/testcases/kernel/syscalls/fcntl/fcntl16.c
> +++ b/testcases/kernel/syscalls/fcntl/fcntl16.c
> @@ -51,6 +51,8 @@
> #include <sys/types.h>
> #include <sys/wait.h>
>
> +#include "tst_fs_type.h"
> +
> #define SKIPVAL 0x0f00
> //#define SKIP SKIPVAL, 0, 0L, 0L, IGNORED
> #define SKIP 0,0,0L,0L,0
> @@ -412,6 +414,12 @@ void setup(void)
>
> tst_tmpdir();
>
> + /* On NFS or not */
> + if (tst_fs_type(cleanup, ".") == TST_NFS_MAGIC) {
> + tst_brkm(TCONF, cleanup, "Cannot test madatory locking "
> + "on a file located on an NFS filesystem");
> + }
> +
> /* set up temp filename */
> sprintf(tmpname, "fcntl4.%d", parent);
>
> --
> 1.8.3.1
>
> ------------------------------------------------------------------------------
> _______________________________________________
> Ltp-list mailing list
> Ltp-list@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ltp-list
>
------------------------------------------------------------------------------
Slashdot TV.
Video for Nerds. Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [LTP] [PATCH v2] Skip some dio/fcntl cases on NFS
2014-08-12 4:37 ` [LTP] [PATCH v2] Skip some dio/fcntl cases on NFS Xiong Zhou
2014-08-20 1:23 ` Xiong Zhou
@ 2014-08-20 11:59 ` Stanislav Kholmanskikh
2014-08-21 2:40 ` Xiong Zhou
1 sibling, 1 reply; 4+ messages in thread
From: Stanislav Kholmanskikh @ 2014-08-20 11:59 UTC (permalink / raw)
To: ltp-list
Hi!
Sorry for delay.
On 08/12/2014 08:37 AM, Xiong Zhou wrote:
>
> According to description of NFS and directIO in open(2), especially
> "The Linux NFS client places no alignment restrictions on
> O_DIRECT I/O", ignore "odd count"/"non-aligned" read-write FAILs
> in diotest4. Some dup code clean up btw.
I think it would be better to split the logic and cleanup parts into
separate patches, because both parts are not small.
>
> According to nfs(5), NLM supports advisory file locks only. So skip
> fcntl16 test if NFS.
>
> Signed-off-by: Xiong Zhou <xzhou@redhat.com>
> ---
> testcases/kernel/io/direct_io/diotest4.c | 148 ++++++++++++++----------------
> testcases/kernel/syscalls/fcntl/fcntl16.c | 8 ++
> 2 files changed, 79 insertions(+), 77 deletions(-)
>
> diff --git a/testcases/kernel/io/direct_io/diotest4.c b/testcases/kernel/io/direct_io/diotest4.c
> index 10281bf..934d5b1 100644
> --- a/testcases/kernel/io/direct_io/diotest4.c
> +++ b/testcases/kernel/io/direct_io/diotest4.c
> @@ -71,9 +71,11 @@
>
> #include "test.h"
> #include "usctest.h"
> +#include "tst_fs_type.h"
>
> char *TCID = "diotest4"; /* Test program identifier. */
> int TST_TOTAL = 17; /* Total number of test conditions */
> +int NO_NFS = 1; /* Test on NFS or not */
>
> #ifdef O_DIRECT
>
> @@ -171,6 +173,16 @@ void prg_usage()
> exit(1);
> }
>
> +static void testcheck_end(int ret, int *failed, int *fail_count, char *msg)
> +{
> + if (ret != 0) {
> + *failed = TRUE;
> + *fail_count++;
> + tst_resm(TFAIL, msg);
> + } else
> + tst_resm(TPASS, msg);
> +}
> +
> static void setup(void);
> static void cleanup(void);
> static int fd1 = -1;
> @@ -206,6 +218,10 @@ int main(int argc, char *argv[])
>
> setup();
>
> + /* On NFS or not */
> + if (tst_fs_type(cleanup, ".") == TST_NFS_MAGIC)
> + NO_NFS = 0;
> +
Maybe put it to setup(). IMHO, it's logically coupled with setup().
> /* Open file and fill, allocate for buffer */
> if ((fd = open(filename, O_DIRECT | O_RDWR | O_CREAT, 0666)) < 0) {
> tst_brkm(TBROK, cleanup, "open failed for %s: %s",
> @@ -251,17 +267,41 @@ int main(int argc, char *argv[])
> /* Test-3: Odd count of read and write */
> offset = 0;
> count = 1;
> + l_fail = 0;
> lseek(fd, 0, SEEK_SET);
> if (write(fd, buf2, 4096) == -1) {
> tst_resm(TFAIL, "can't write to file %d", ret);
> }
> - ret = runtest_f(fd, buf2, offset, count, EINVAL, 3, "odd count");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "Odd count of read and write");
> - } else
> - tst_resm(TPASS, "Odd count of read and write");
> + if (lseek(fd, offset, SEEK_SET) < 0) {
> + if (errno != EINVAL) {
> + tst_resm(TFAIL, "lseek before read failed: %s",
> + strerror(errno));
> + l_fail = TRUE;
> + }
> + } else {
> + ret = read(fd, buf2, count);
> + if ((ret >= 0 || errno != EINVAL) && NO_NFS) {
> + tst_resm(TFAIL, "read allows %s. returns %d: %s",
> + "odd count", ret, strerror(errno));
> + l_fail = TRUE;
> + }
> + }
> + if (lseek(fd, offset, SEEK_SET) < 0) {
> + if (errno != EINVAL) {
> + tst_resm(TFAIL, "lseek before write failed: %s",
> + strerror(errno));
> + l_fail = TRUE;
> + }
> + } else {
> + ret = write(fd, buf2, count);
> + if ((ret >= 0 || errno != EINVAL) && NO_NFS) {
> + tst_resm(TFAIL, "write allows %s.returns %d: %s",
> + "odd count", ret, strerror(errno));
> + l_fail = TRUE;
> + }
> + }
> + testcheck_end(l_fail, &failed, &fail_count,
> + "Odd count of read and write");
You copied code from runtest_f(). I suppose it's easier to skip this
entire test case on NFS, than skipping only write() and read() failures.
Like:
offset = 0;
count = 1;
lseek(fd, 0, SEEK_SET);
if (write(...)) {
...
}
if (NO_NFS) {
ret = runtest_f();
testcheck_end();
} else {
tst_resm(TCONF, "Statement that this test case is not applicable to
NFS");
}
total++;
> total++;
>
> /* Test-4: Read beyond the file size */
> @@ -290,12 +330,7 @@ int main(int argc, char *argv[])
> count = bufsize;
> newfd = -1;
> ret = runtest_f(newfd, buf2, offset, count, EBADF, 5, "negative fd");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "Invalid file descriptor");
> - } else
> - tst_resm(TPASS, "Invalid file descriptor");
> + testcheck_end(ret, &failed, &fail_count, "Invalid file descriptor");
> total++;
>
> /* Test-6: Out of range file descriptor */
> @@ -306,15 +341,10 @@ int main(int argc, char *argv[])
> failed = TRUE;
> tst_resm(TFAIL, "Out of range file descriptor");
> } else {
> - ret =
> - runtest_f(newfd, buf2, offset, count, EBADF, 6,
> + ret = runtest_f(newfd, buf2, offset, count, EBADF, 6,
> "out of range fd");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "Out of range file descriptor");
> - } else
> - tst_resm(TPASS, "Out of range file descriptor");
> + testcheck_end(ret, &failed, &fail_count,
> + "Out of range file descriptor");
> }
> close(newfd);
> total++;
> @@ -327,12 +357,7 @@ int main(int argc, char *argv[])
> strerror(errno));
> }
> ret = runtest_f(fd, buf2, offset, count, EBADF, 7, "closed fd");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "Closed file descriptor");
> - } else
> - tst_resm(TPASS, "Closed file descriptor");
> + testcheck_end(ret, &failed, &fail_count, "Closed file descriptor");
> total++;
>
> /* Test-9: removed */
> @@ -345,12 +370,8 @@ int main(int argc, char *argv[])
> tst_resm(TCONF, "Direct I/O on /dev/null is not supported");
> } else {
> ret = runtest_s(newfd, buf2, offset, count, 9, "/dev/null");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "character device read, write");
> - } else
> - tst_resm(TPASS, "character device read, write");
> + testcheck_end(ret, &failed, &fail_count,
> + "character device read, write");
> }
> close(newfd);
> total++;
> @@ -373,12 +394,8 @@ int main(int argc, char *argv[])
> strerror(errno));
> }
> ret = runtest_s(fd, buf2, offset, count, 10, "mmapped file");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "read, write to a mmaped file");
> - } else
> - tst_resm(TPASS, "read, write to a mmaped file");
> + testcheck_end(ret, &failed, &fail_count,
> + "read, write to a mmaped file");
> total++;
>
> /* Test-11: read, write to an unmaped file with munmap */
> @@ -387,12 +404,8 @@ int main(int argc, char *argv[])
> strerror(errno));
> }
> ret = runtest_s(fd, buf2, offset, count, 11, "unmapped file");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "read, write to an unmapped file");
> - } else
> - tst_resm(TPASS, "read, write to an unmapped file");
> + testcheck_end(ret, &failed, &fail_count,
> + "read, write to an unmapped file");
> close(fd);
> total++;
>
> @@ -459,7 +472,7 @@ int main(int argc, char *argv[])
> strerror(errno));
> l_fail = TRUE;
> } else {
> - if ((ret = read(fd, buf2 + 1, count)) != -1) {
> + if (((ret = read(fd, buf2 + 1, count)) != -1) && NO_NFS) {
> tst_resm(TFAIL,
> "allows read nonaligned buf. returns %d: %s",
> ret, strerror(errno));
> @@ -471,19 +484,15 @@ int main(int argc, char *argv[])
> strerror(errno));
> l_fail = TRUE;
> } else {
> - if ((ret = write(fd, buf2 + 1, count)) != -1) {
> + if (((ret = write(fd, buf2 + 1, count)) != -1) && NO_NFS) {
> tst_resm(TFAIL,
> "allows write nonaligned buf. returns %d: %s",
> ret, strerror(errno));
> l_fail = TRUE;
> }
> }
> - if (l_fail) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "read, write with non-aligned buffer");
> - } else
> - tst_resm(TPASS, "read, write with non-aligned buffer");
> + testcheck_end(l_fail, &failed, &fail_count,
> + "read, write with non-aligned buffer");
Could we use runtest_f(EINVAL) here for Test-14 and apply the algorithm
I described above for Test-3?
> total++;
> close(fd);
>
> @@ -500,8 +509,7 @@ int main(int argc, char *argv[])
> strerror(errno));
> l_fail = TRUE;
> } else {
> - ret =
> - read(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
> + ret = read(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
> count);
> if (ret >= 0 || errno != EFAULT) {
> tst_resm(TFAIL,
> @@ -515,8 +523,7 @@ int main(int argc, char *argv[])
> strerror(errno));
> l_fail = TRUE;
> } else {
> - ret =
> - write(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
> + ret = write(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
> count);
> if (ret < 0) {
> tst_resm(TFAIL,
> @@ -525,12 +532,8 @@ int main(int argc, char *argv[])
> l_fail = TRUE;
> }
> }
> - if (l_fail) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "read, write buffer in read-only space");
> - } else
> - tst_resm(TPASS, "read, write buffer in read-only space");
> + testcheck_end(l_fail, &failed, &fail_count,
> + "read, write buffer in read-only space");
> close(fd);
> total++;
>
> @@ -545,15 +548,10 @@ int main(int argc, char *argv[])
> tst_brkm(TBROK | TERRNO, cleanup,
> "open(%s, O_DIRECT|O_RDWR) failed", filename);
> }
> - ret =
> - runtest_f(fd, buf1, offset, count, EFAULT, 16,
> + ret = runtest_f(fd, buf1, offset, count, EFAULT, 16,
> " nonexistant space");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "read, write in non-existant space");
> - } else
> - tst_resm(TPASS, "read, write in non-existant space");
> + testcheck_end(ret, &failed, &fail_count,
> + "read, write in non-existant space");
> total++;
> close(fd);
>
> @@ -565,12 +563,8 @@ int main(int argc, char *argv[])
> "open(%s, O_DIRECT|O_RDWR|O_SYNC failed)", filename);
> }
> ret = runtest_s(fd, buf2, offset, count, 17, "opened with O_SYNC");
> - if (ret != 0) {
> - failed = TRUE;
> - fail_count++;
> - tst_resm(TFAIL, "read, write for file with O_SYNC");
> - } else
> - tst_resm(TPASS, "read, write for file with O_SYNC");
> + testcheck_end(ret, &failed, &fail_count,
> + "read, write for file with O_SYNC");
> total++;
> close(fd);
>
> diff --git a/testcases/kernel/syscalls/fcntl/fcntl16.c b/testcases/kernel/syscalls/fcntl/fcntl16.c
> index 44b6a80..7dba6ea 100644
> --- a/testcases/kernel/syscalls/fcntl/fcntl16.c
> +++ b/testcases/kernel/syscalls/fcntl/fcntl16.c
> @@ -51,6 +51,8 @@
> #include <sys/types.h>
> #include <sys/wait.h>
>
> +#include "tst_fs_type.h"
> +
> #define SKIPVAL 0x0f00
> //#define SKIP SKIPVAL, 0, 0L, 0L, IGNORED
> #define SKIP 0,0,0L,0L,0
> @@ -412,6 +414,12 @@ void setup(void)
>
> tst_tmpdir();
>
> + /* On NFS or not */
> + if (tst_fs_type(cleanup, ".") == TST_NFS_MAGIC) {
> + tst_brkm(TCONF, cleanup, "Cannot test madatory locking "
> + "on a file located on an NFS filesystem");
> + }
> +
> /* set up temp filename */
> sprintf(tmpname, "fcntl4.%d", parent);
>
>
------------------------------------------------------------------------------
Slashdot TV.
Video for Nerds. Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [LTP] [PATCH v2] Skip some dio/fcntl cases on NFS
2014-08-20 11:59 ` Stanislav Kholmanskikh
@ 2014-08-21 2:40 ` Xiong Zhou
0 siblings, 0 replies; 4+ messages in thread
From: Xiong Zhou @ 2014-08-21 2:40 UTC (permalink / raw)
To: Stanislav Kholmanskikh; +Cc: ltp-list
----- Original Message -----
> From: "Stanislav Kholmanskikh" <stanislav.kholmanskikh@oracle.com>
> To: ltp-list@lists.sourceforge.net
> Sent: Wednesday, August 20, 2014 7:59:42 PM
> Subject: Re: [LTP] [PATCH v2] Skip some dio/fcntl cases on NFS
>
> Hi!
>
> Sorry for delay.
>
No problem. :)
Thanks for reviewing!
> On 08/12/2014 08:37 AM, Xiong Zhou wrote:
> >
> > According to description of NFS and directIO in open(2), especially
> > "The Linux NFS client places no alignment restrictions on
> > O_DIRECT I/O", ignore "odd count"/"non-aligned" read-write FAILs
> > in diotest4. Some dup code clean up btw.
>
> I think it would be better to split the logic and cleanup parts into
> separate patches, because both parts are not small.
>
Yes, It should be split. So does the change of different files.
>
> >
> > According to nfs(5), NLM supports advisory file locks only. So skip
> > fcntl16 test if NFS.
> >
> > Signed-off-by: Xiong Zhou <xzhou@redhat.com>
> > ---
> > testcases/kernel/io/direct_io/diotest4.c | 148
> > ++++++++++++++----------------
> > testcases/kernel/syscalls/fcntl/fcntl16.c | 8 ++
> > 2 files changed, 79 insertions(+), 77 deletions(-)
> >
> > diff --git a/testcases/kernel/io/direct_io/diotest4.c
> > b/testcases/kernel/io/direct_io/diotest4.c
> > index 10281bf..934d5b1 100644
> > --- a/testcases/kernel/io/direct_io/diotest4.c
> > +++ b/testcases/kernel/io/direct_io/diotest4.c
> > @@ -71,9 +71,11 @@
> >
> > #include "test.h"
> > #include "usctest.h"
> > +#include "tst_fs_type.h"
> >
> > char *TCID = "diotest4"; /* Test program identifier. */
> > int TST_TOTAL = 17; /* Total number of test conditions */
> > +int NO_NFS = 1; /* Test on NFS or not */
> >
> > #ifdef O_DIRECT
> >
> > @@ -171,6 +173,16 @@ void prg_usage()
> > exit(1);
> > }
> >
> > +static void testcheck_end(int ret, int *failed, int *fail_count, char
> > *msg)
> > +{
> > + if (ret != 0) {
> > + *failed = TRUE;
> > + *fail_count++;
> > + tst_resm(TFAIL, msg);
> > + } else
> > + tst_resm(TPASS, msg);
> > +}
> > +
> > static void setup(void);
> > static void cleanup(void);
> > static int fd1 = -1;
> > @@ -206,6 +218,10 @@ int main(int argc, char *argv[])
> >
> > setup();
> >
> > + /* On NFS or not */
> > + if (tst_fs_type(cleanup, ".") == TST_NFS_MAGIC)
> > + NO_NFS = 0;
> > +
>
> Maybe put it to setup(). IMHO, it's logically coupled with setup().
>
OK, It does and it meets the 'Unless' part of libltp guideline 3 in doc/style-guide.txt.
> > /* Open file and fill, allocate for buffer */
> > if ((fd = open(filename, O_DIRECT | O_RDWR | O_CREAT, 0666)) < 0) {
> > tst_brkm(TBROK, cleanup, "open failed for %s: %s",
> > @@ -251,17 +267,41 @@ int main(int argc, char *argv[])
> > /* Test-3: Odd count of read and write */
> > offset = 0;
> > count = 1;
> > + l_fail = 0;
> > lseek(fd, 0, SEEK_SET);
> > if (write(fd, buf2, 4096) == -1) {
> > tst_resm(TFAIL, "can't write to file %d", ret);
> > }
> > - ret = runtest_f(fd, buf2, offset, count, EINVAL, 3, "odd count");
> > - if (ret != 0) {
> > - failed = TRUE;
> > - fail_count++;
> > - tst_resm(TFAIL, "Odd count of read and write");
> > - } else
> > - tst_resm(TPASS, "Odd count of read and write");
> > + if (lseek(fd, offset, SEEK_SET) < 0) {
> > + if (errno != EINVAL) {
> > + tst_resm(TFAIL, "lseek before read failed: %s",
> > + strerror(errno));
> > + l_fail = TRUE;
> > + }
> > + } else {
> > + ret = read(fd, buf2, count);
> > + if ((ret >= 0 || errno != EINVAL) && NO_NFS) {
> > + tst_resm(TFAIL, "read allows %s. returns %d: %s",
> > + "odd count", ret, strerror(errno));
> > + l_fail = TRUE;
> > + }
> > + }
> > + if (lseek(fd, offset, SEEK_SET) < 0) {
> > + if (errno != EINVAL) {
> > + tst_resm(TFAIL, "lseek before write failed: %s",
> > + strerror(errno));
> > + l_fail = TRUE;
> > + }
> > + } else {
> > + ret = write(fd, buf2, count);
> > + if ((ret >= 0 || errno != EINVAL) && NO_NFS) {
> > + tst_resm(TFAIL, "write allows %s.returns %d: %s",
> > + "odd count", ret, strerror(errno));
> > + l_fail = TRUE;
> > + }
> > + }
> > + testcheck_end(l_fail, &failed, &fail_count,
> > + "Odd count of read and write");
>
> You copied code from runtest_f(). I suppose it's easier to skip this
> entire test case on NFS, than skipping only write() and read() failures.
> Like:
>
> offset = 0;
> count = 1;
> lseek(fd, 0, SEEK_SET);
> if (write(...)) {
> ...
> }
> if (NO_NFS) {
> ret = runtest_f();
> testcheck_end();
> } else {
> tst_resm(TCONF, "Statement that this test case is not applicable to
> NFS");
> }
> total++;
OK, This is better and more concise.
>
> > total++;
> >
> > /* Test-4: Read beyond the file size */
> > @@ -290,12 +330,7 @@ int main(int argc, char *argv[])
> > count = bufsize;
> > newfd = -1;
> > ret = runtest_f(newfd, buf2, offset, count, EBADF, 5, "negative fd");
> > - if (ret != 0) {
> > - failed = TRUE;
> > - fail_count++;
> > - tst_resm(TFAIL, "Invalid file descriptor");
> > - } else
> > - tst_resm(TPASS, "Invalid file descriptor");
> > + testcheck_end(ret, &failed, &fail_count, "Invalid file descriptor");
> > total++;
> >
> > /* Test-6: Out of range file descriptor */
> > @@ -306,15 +341,10 @@ int main(int argc, char *argv[])
> > failed = TRUE;
> > tst_resm(TFAIL, "Out of range file descriptor");
> > } else {
> > - ret =
> > - runtest_f(newfd, buf2, offset, count, EBADF, 6,
> > + ret = runtest_f(newfd, buf2, offset, count, EBADF, 6,
> > "out of range fd");
> > - if (ret != 0) {
> > - failed = TRUE;
> > - fail_count++;
> > - tst_resm(TFAIL, "Out of range file descriptor");
> > - } else
> > - tst_resm(TPASS, "Out of range file descriptor");
> > + testcheck_end(ret, &failed, &fail_count,
> > + "Out of range file descriptor");
> > }
> > close(newfd);
> > total++;
> > @@ -327,12 +357,7 @@ int main(int argc, char *argv[])
> > strerror(errno));
> > }
> > ret = runtest_f(fd, buf2, offset, count, EBADF, 7, "closed fd");
> > - if (ret != 0) {
> > - failed = TRUE;
> > - fail_count++;
> > - tst_resm(TFAIL, "Closed file descriptor");
> > - } else
> > - tst_resm(TPASS, "Closed file descriptor");
> > + testcheck_end(ret, &failed, &fail_count, "Closed file descriptor");
> > total++;
> >
> > /* Test-9: removed */
> > @@ -345,12 +370,8 @@ int main(int argc, char *argv[])
> > tst_resm(TCONF, "Direct I/O on /dev/null is not supported");
> > } else {
> > ret = runtest_s(newfd, buf2, offset, count, 9, "/dev/null");
> > - if (ret != 0) {
> > - failed = TRUE;
> > - fail_count++;
> > - tst_resm(TFAIL, "character device read, write");
> > - } else
> > - tst_resm(TPASS, "character device read, write");
> > + testcheck_end(ret, &failed, &fail_count,
> > + "character device read, write");
> > }
> > close(newfd);
> > total++;
> > @@ -373,12 +394,8 @@ int main(int argc, char *argv[])
> > strerror(errno));
> > }
> > ret = runtest_s(fd, buf2, offset, count, 10, "mmapped file");
> > - if (ret != 0) {
> > - failed = TRUE;
> > - fail_count++;
> > - tst_resm(TFAIL, "read, write to a mmaped file");
> > - } else
> > - tst_resm(TPASS, "read, write to a mmaped file");
> > + testcheck_end(ret, &failed, &fail_count,
> > + "read, write to a mmaped file");
> > total++;
> >
> > /* Test-11: read, write to an unmaped file with munmap */
> > @@ -387,12 +404,8 @@ int main(int argc, char *argv[])
> > strerror(errno));
> > }
> > ret = runtest_s(fd, buf2, offset, count, 11, "unmapped file");
> > - if (ret != 0) {
> > - failed = TRUE;
> > - fail_count++;
> > - tst_resm(TFAIL, "read, write to an unmapped file");
> > - } else
> > - tst_resm(TPASS, "read, write to an unmapped file");
> > + testcheck_end(ret, &failed, &fail_count,
> > + "read, write to an unmapped file");
> > close(fd);
> > total++;
> >
> > @@ -459,7 +472,7 @@ int main(int argc, char *argv[])
> > strerror(errno));
> > l_fail = TRUE;
> > } else {
> > - if ((ret = read(fd, buf2 + 1, count)) != -1) {
> > + if (((ret = read(fd, buf2 + 1, count)) != -1) && NO_NFS) {
> > tst_resm(TFAIL,
> > "allows read nonaligned buf. returns %d: %s",
> > ret, strerror(errno));
> > @@ -471,19 +484,15 @@ int main(int argc, char *argv[])
> > strerror(errno));
> > l_fail = TRUE;
> > } else {
> > - if ((ret = write(fd, buf2 + 1, count)) != -1) {
> > + if (((ret = write(fd, buf2 + 1, count)) != -1) && NO_NFS) {
> > tst_resm(TFAIL,
> > "allows write nonaligned buf. returns %d: %s",
> > ret, strerror(errno));
> > l_fail = TRUE;
> > }
> > }
> > - if (l_fail) {
> > - failed = TRUE;
> > - fail_count++;
> > - tst_resm(TFAIL, "read, write with non-aligned buffer");
> > - } else
> > - tst_resm(TPASS, "read, write with non-aligned buffer");
> > + testcheck_end(l_fail, &failed, &fail_count,
> > + "read, write with non-aligned buffer");
>
> Could we use runtest_f(EINVAL) here for Test-14 and apply the algorithm
> I described above for Test-3?
>
Of course.
Thanks for reviewing!
Regards,
xzhou
>
> > total++;
> > close(fd);
> >
> > @@ -500,8 +509,7 @@ int main(int argc, char *argv[])
> > strerror(errno));
> > l_fail = TRUE;
> > } else {
> > - ret =
> > - read(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
> > + ret = read(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
> > count);
> > if (ret >= 0 || errno != EFAULT) {
> > tst_resm(TFAIL,
> > @@ -515,8 +523,7 @@ int main(int argc, char *argv[])
> > strerror(errno));
> > l_fail = TRUE;
> > } else {
> > - ret =
> > - write(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
> > + ret = write(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
> > count);
> > if (ret < 0) {
> > tst_resm(TFAIL,
> > @@ -525,12 +532,8 @@ int main(int argc, char *argv[])
> > l_fail = TRUE;
> > }
> > }
> > - if (l_fail) {
> > - failed = TRUE;
> > - fail_count++;
> > - tst_resm(TFAIL, "read, write buffer in read-only space");
> > - } else
> > - tst_resm(TPASS, "read, write buffer in read-only space");
> > + testcheck_end(l_fail, &failed, &fail_count,
> > + "read, write buffer in read-only space");
> > close(fd);
> > total++;
> >
> > @@ -545,15 +548,10 @@ int main(int argc, char *argv[])
> > tst_brkm(TBROK | TERRNO, cleanup,
> > "open(%s, O_DIRECT|O_RDWR) failed", filename);
> > }
> > - ret =
> > - runtest_f(fd, buf1, offset, count, EFAULT, 16,
> > + ret = runtest_f(fd, buf1, offset, count, EFAULT, 16,
> > " nonexistant space");
> > - if (ret != 0) {
> > - failed = TRUE;
> > - fail_count++;
> > - tst_resm(TFAIL, "read, write in non-existant space");
> > - } else
> > - tst_resm(TPASS, "read, write in non-existant space");
> > + testcheck_end(ret, &failed, &fail_count,
> > + "read, write in non-existant space");
> > total++;
> > close(fd);
> >
> > @@ -565,12 +563,8 @@ int main(int argc, char *argv[])
> > "open(%s, O_DIRECT|O_RDWR|O_SYNC failed)", filename);
> > }
> > ret = runtest_s(fd, buf2, offset, count, 17, "opened with O_SYNC");
> > - if (ret != 0) {
> > - failed = TRUE;
> > - fail_count++;
> > - tst_resm(TFAIL, "read, write for file with O_SYNC");
> > - } else
> > - tst_resm(TPASS, "read, write for file with O_SYNC");
> > + testcheck_end(ret, &failed, &fail_count,
> > + "read, write for file with O_SYNC");
> > total++;
> > close(fd);
> >
> > diff --git a/testcases/kernel/syscalls/fcntl/fcntl16.c
> > b/testcases/kernel/syscalls/fcntl/fcntl16.c
> > index 44b6a80..7dba6ea 100644
> > --- a/testcases/kernel/syscalls/fcntl/fcntl16.c
> > +++ b/testcases/kernel/syscalls/fcntl/fcntl16.c
> > @@ -51,6 +51,8 @@
> > #include <sys/types.h>
> > #include <sys/wait.h>
> >
> > +#include "tst_fs_type.h"
> > +
> > #define SKIPVAL 0x0f00
> > //#define SKIP SKIPVAL, 0, 0L, 0L, IGNORED
> > #define SKIP 0,0,0L,0L,0
> > @@ -412,6 +414,12 @@ void setup(void)
> >
> > tst_tmpdir();
> >
> > + /* On NFS or not */
> > + if (tst_fs_type(cleanup, ".") == TST_NFS_MAGIC) {
> > + tst_brkm(TCONF, cleanup, "Cannot test madatory locking "
> > + "on a file located on an NFS filesystem");
> > + }
> > +
> > /* set up temp filename */
> > sprintf(tmpname, "fcntl4.%d", parent);
> >
> >
>
> ------------------------------------------------------------------------------
> Slashdot TV.
> Video for Nerds. Stuff that matters.
> http://tv.slashdot.org/
> _______________________________________________
> Ltp-list mailing list
> Ltp-list@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ltp-list
>
------------------------------------------------------------------------------
Slashdot TV.
Video for Nerds. Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-08-21 2:41 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1732727369.18779125.1407818184641.JavaMail.zimbra@redhat.com>
2014-08-12 4:37 ` [LTP] [PATCH v2] Skip some dio/fcntl cases on NFS Xiong Zhou
2014-08-20 1:23 ` Xiong Zhou
2014-08-20 11:59 ` Stanislav Kholmanskikh
2014-08-21 2:40 ` Xiong Zhou
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox