Starting with 3.10 dio_sparse sporadically fails, because read() in read_sparse returns garbage and dio_sparse testcase fails with: dio_sparse 0 TINFO : Dirtying free blocks dio_sparse 0 TINFO : Starting I/O tests non zero buffer at buf[0] => 0xffffffaa,ffffffaa,ffffffaa,ffffffaa non-zero read at offset 0 dio_sparse 0 TINFO : Killing childrens(s) dio_sparse 1 TFAIL : 1 children(s) exited abnormally
Issue is that we have parent opening file as O_DIRECT and children trying to read from it without O_DIRECT, which is discouraged in man pages. open(2) says: "Applications should avoid mixing O_DIRECT and normal I/O to the same file, and especially to overlapping byte regions in the same file." Signed-off-by: Jan Stancek <jstan...@redhat.com> --- testcases/kernel/io/ltp-aiodio/aiodio_sparse.c | 2 +- testcases/kernel/io/ltp-aiodio/common_sparse.h | 4 ++-- testcases/kernel/io/ltp-aiodio/dio_sparse.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/testcases/kernel/io/ltp-aiodio/aiodio_sparse.c b/testcases/kernel/io/ltp-aiodio/aiodio_sparse.c index 944e12b..705bbc5 100644 --- a/testcases/kernel/io/ltp-aiodio/aiodio_sparse.c +++ b/testcases/kernel/io/ltp-aiodio/aiodio_sparse.c @@ -279,7 +279,7 @@ int main(int argc, char **argv) for (i = 0; i < num_children; i++) { switch (pid[i] = fork()) { case 0: - read_sparse(filename, filesize); + read_sparse(filename, filesize, O_DIRECT); break; case -1: while (i-- > 0) diff --git a/testcases/kernel/io/ltp-aiodio/common_sparse.h b/testcases/kernel/io/ltp-aiodio/common_sparse.h index f7f4ef4..6a294cb 100644 --- a/testcases/kernel/io/ltp-aiodio/common_sparse.h +++ b/testcases/kernel/io/ltp-aiodio/common_sparse.h @@ -104,7 +104,7 @@ char *check_zero(char *buf, int size) * either there is a hole in the file, * or zeroes were actually written by parent. */ -static void read_sparse(char *filename, int filesize) +static void read_sparse(char *filename, int filesize, int mode) { int fd; int i, j, r; @@ -114,7 +114,7 @@ static void read_sparse(char *filename, int filesize) * Wait for the file to appear. */ for (i = 0; i < 10000; i++) { - fd = open(filename, O_RDONLY); + fd = open(filename, O_RDONLY | mode); if (fd != -1) break; diff --git a/testcases/kernel/io/ltp-aiodio/dio_sparse.c b/testcases/kernel/io/ltp-aiodio/dio_sparse.c index 7ad5f80..eaaea14 100644 --- a/testcases/kernel/io/ltp-aiodio/dio_sparse.c +++ b/testcases/kernel/io/ltp-aiodio/dio_sparse.c @@ -153,7 +153,7 @@ int main(int argc, char **argv) for (i = 0; i < num_children; i++) { switch (pid[i] = fork()) { case 0: - read_sparse(filename, filesize); + read_sparse(filename, filesize, O_DIRECT); break; case -1: while (i-- > 0) -- 1.7.1 ------------------------------------------------------------------------------ Get 100% visibility into Java/.NET code with AppDynamics Lite! It's a free troubleshooting tool designed for production. Get down to code-level detail for bottlenecks, with <2% overhead. Download for free and get started troubleshooting in minutes. http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list