* [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