* [LTP] [PATCH 1/3] diotest: cleanup & fix
@ 2015-10-29 16:55 Cedric Hnyda
2015-10-29 16:55 ` [LTP] [PATCH 2/3] diotest4.c: Fixed filesystem Cedric Hnyda
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Cedric Hnyda @ 2015-10-29 16:55 UTC (permalink / raw)
To: ltp
This patch is mostly about fixing coding style mistakes
in diotest*.c to make the code more readable.
Headers were also updated.
Useless function arguments were removed
Useless "removed" tests like:
tst_resm(TPASS, "removed")
were removed.
Added O_DIRECT in fcntl.h and check
that O_DIRECT is supported by the file system
Signed-off-by: Cedric Hnyda <chnyda@suse.com>
---
include/lapi/fcntl.h | 4 +
testcases/kernel/io/direct_io/diotest1.c | 84 +++++-----
testcases/kernel/io/direct_io/diotest2.c | 121 ++++++++-------
testcases/kernel/io/direct_io/diotest3.c | 118 +++++++-------
testcases/kernel/io/direct_io/diotest4.c | 189 ++++++++++++-----------
testcases/kernel/io/direct_io/diotest5.c | 141 ++++++++---------
testcases/kernel/io/direct_io/diotest6.c | 66 ++++----
testcases/kernel/io/direct_io/diotest_routines.c | 68 ++++----
testcases/kernel/io/direct_io/diotest_routines.h | 40 +++--
9 files changed, 435 insertions(+), 396 deletions(-)
diff --git a/include/lapi/fcntl.h b/include/lapi/fcntl.h
index 0661651..e5d223a 100644
--- a/include/lapi/fcntl.h
+++ b/include/lapi/fcntl.h
@@ -59,6 +59,10 @@
# define O_NOATIME 01000000
#endif
+#ifndef O_DIRECT
+# define O_DIRECT 00040000
+#endif
+
#ifndef O_PATH
# define O_PATH 010000000
#endif
diff --git a/testcases/kernel/io/direct_io/diotest1.c b/testcases/kernel/io/direct_io/diotest1.c
index ca32898..110c629 100644
--- a/testcases/kernel/io/direct_io/diotest1.c
+++ b/testcases/kernel/io/direct_io/diotest1.c
@@ -1,20 +1,20 @@
/*
+ * Copyright (c) International Business Machines Corp., 2002
+ * 04/30/2002 Narasimha Sharoff nsharoff@us.ibm.com
*
- * Copyright (c) International Business Machines Corp., 2002
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
@@ -30,12 +30,6 @@
*
* USAGE
* diotest1 [-b bufsize] [-n numblks] [-i infile] [-o outfile]
- *
- * History
- * 04/22/2002 Narasimha Sharoff nsharoff@us.ibm.com
- *
- * RESTRICTIONS
- * None
*/
#include <stdio.h>
@@ -50,20 +44,21 @@
#include "test.h"
-char *TCID = "diotest01"; /* Test program identifier. */
-int TST_TOTAL = 1; /* Total number of test conditions */
-
-#ifdef O_DIRECT
+char *TCID = "diotest01";
+int TST_TOTAL = 1;
#define BUFSIZE 8192
#define NBLKS 20
#define LEN 30
#define TRUE 1
+static void fail_clean(int fd1, int fd2, char *infile, char *outfile);
+static void prg_usage(void);
+
/*
* prg_usage: display the program usage.
*/
-void prg_usage()
+static void prg_usage(void)
{
fprintf(stderr,
"Usage: diotest1 [-b bufsize] [-n numblks] [-i infile] [-o outfile]\n");
@@ -73,7 +68,7 @@ void prg_usage()
/*
* fail_clean: cleanup and exit.
*/
-void fail_clean(int fd1, int fd2, char *infile, char *outfile)
+static void fail_clean(int fd1, int fd2, char *infile, char *outfile)
{
close(fd1);
close(fd2);
@@ -98,7 +93,8 @@ int main(int argc, char *argv[])
while ((i = getopt(argc, argv, "b:n:i:o:")) != -1) {
switch (i) {
case 'b':
- if ((bufsize = atoi(optarg)) <= 0) {
+ bufsize = atoi(optarg);
+ if (bufsize <= 0) {
fprintf(stderr, "bufsize must be > 0\n");
prg_usage();
}
@@ -109,7 +105,8 @@ int main(int argc, char *argv[])
}
break;
case 'n':
- if ((numblks = atoi(optarg)) <= 0) {
+ numblks = atoi(optarg);
+ if (numblks <= 0) {
fprintf(stderr, "numblks must be > 0\n");
prg_usage();
}
@@ -126,21 +123,25 @@ int main(int argc, char *argv[])
}
/* Test for filesystem support of O_DIRECT */
- if ((fd = open(infile, O_DIRECT | O_RDWR | O_CREAT, 0666)) < 0) {
- tst_brkm(TCONF,
- NULL,
- "O_DIRECT is not supported by this filesystem.");
- } else {
- close(fd);
- }
+ fd = open(infile, O_DIRECT | O_RDWR | O_CREAT, 0666);
+ if (fd < 0 && errno == EINVAL)
+ tst_brkm(TCONF, NULL,
+ "O_DIRECT is not supported by this filesystem. %s",
+ strerror(errno));
+ else if (fd < 0)
+ tst_brkm(TBROK, NULL, "Couldn't open test file %s: %s",
+ infile, strerror(errno));
+ close(fd);
/* Open files */
- if ((fd1 = open(infile, O_DIRECT | O_RDWR | O_CREAT, 0666)) < 0) {
+ fd1 = open(infile, O_DIRECT | O_RDWR | O_CREAT, 0666);
+ if (fd1 < 0) {
tst_brkm(TFAIL, NULL, "open infile failed: %s",
strerror(errno));
}
- if ((fd2 = open(outfile, O_DIRECT | O_RDWR | O_CREAT, 0666)) < 0) {
+ fd2 = open(outfile, O_DIRECT | O_RDWR | O_CREAT, 0666);
+ if (fd2 < 0) {
close(fd1);
unlink(infile);
tst_brkm(TFAIL, NULL, "open outfile failed: %s",
@@ -148,7 +149,8 @@ int main(int argc, char *argv[])
}
/* Allocate for buf, Create input file */
- if ((buf = valloc(bufsize)) == 0) {
+ buf = valloc(bufsize);
+ if (!buf) {
tst_resm(TFAIL, "valloc() failed: %s", strerror(errno));
fail_clean(fd1, fd2, infile, outfile);
}
@@ -201,11 +203,3 @@ int main(int argc, char *argv[])
tst_resm(TPASS, "Test passed");
tst_exit();
}
-
-#else /* O_DIRECT */
-
-int main()
-{
- tst_brkm(TCONF, NULL, "O_DIRECT is not defined.");
-}
-#endif /* O_DIRECT */
diff --git a/testcases/kernel/io/direct_io/diotest2.c b/testcases/kernel/io/direct_io/diotest2.c
index 15ae932..afa8e95 100644
--- a/testcases/kernel/io/direct_io/diotest2.c
+++ b/testcases/kernel/io/direct_io/diotest2.c
@@ -1,20 +1,20 @@
/*
+ * Copyright (c) International Business Machines Corp., 2002
+ * 04/30/2002 Narasimha Sharoff nsharoff@us.ibm.com
*
- * Copyright (c) International Business Machines Corp., 2002
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
@@ -35,12 +35,6 @@
*
* USAGE
* diotest2 [-b bufsize] [-o offset] [-i iterations] [-f filename]
- *
- * History
- * 04/22/2002 Narasimha Sharoff nsharoff@us.ibm.com
- *
- * RESTRICTIONS
- * None
*/
#include <stdio.h>
@@ -57,10 +51,8 @@
#include "test.h"
-char *TCID = "diotest02"; /* Test program identifier. */
-int TST_TOTAL = 3; /* Total number of test conditions */
-
-#ifdef O_DIRECT
+char *TCID = "diotest02";
+int TST_TOTAL = 3;
#define BUFSIZE 4096
#define TRUE 1
@@ -69,23 +61,33 @@ int TST_TOTAL = 3; /* Total number of test conditions */
#define WRITE_DIRECT 2
#define RDWR_DIRECT 3
+static int runtest(int fd_r, int fd_w, int iter, off64_t offset);
+static void cleanup(void);
+static void prg_usage(void);
+static void setup(void);
+
+static int fd1 = -1;
+static char filename[LEN];
+
/*
* runtest: write the data to the file. Read the data from the file and compare.
* For each iteration, write data starting at offse+iter*bufsize
* location in the file and read from there.
*/
-int runtest(int fd_r, int fd_w, int iter, off64_t offset, int action)
+static int runtest(int fd_r, int fd_w, int iter, off64_t offset)
{
char *buf1;
char *buf2;
int i, bufsize = BUFSIZE;
/* Allocate for buffers */
- if ((buf1 = valloc(bufsize)) == 0) {
+ buf1 = valloc(bufsize);
+ if (buf1 == 0) {
tst_resm(TFAIL, "valloc() buf1 failed: %s", strerror(errno));
return (-1);
}
- if ((buf2 = valloc(bufsize)) == 0) {
+ buf2 = valloc(bufsize);
+ if (buf2 == 0) {
tst_resm(TFAIL, "valloc() buf2 failed: %s", strerror(errno));
return (-1);
}
@@ -122,24 +124,19 @@ int runtest(int fd_r, int fd_w, int iter, off64_t offset, int action)
/*
* prg_usage: display the program usage.
*/
-void prg_usage()
+static void prg_usage(void)
{
fprintf(stderr,
"Usage: diotest2 [-b bufsize] [-o offset] [-i iterations] [-f filename]\n");
exit(1);
}
-int fd1 = -1;
-char filename[LEN];
-static void setup(void);
-static void cleanup(void);
-
int main(int argc, char *argv[])
{
int iter = 100; /* Iterations. Default 100 */
int bufsize = BUFSIZE; /* Buffer size. Default 4k */
off64_t offset = 0; /* Offset. Default 0 */
- int i, action, fd_r, fd_w;
+ int i, fd_r, fd_w;
int fail_count = 0, total = 0, failed = 0;
/* Options */
@@ -147,7 +144,8 @@ int main(int argc, char *argv[])
while ((i = getopt(argc, argv, "b:o:i:f:")) != -1) {
switch (i) {
case 'b':
- if ((bufsize = atoi(optarg)) <= 0) {
+ bufsize = atoi(optarg);
+ if (bufsize <= 0) {
fprintf(stderr, "bufsize must be > 0\n");
prg_usage();
}
@@ -158,13 +156,15 @@ int main(int argc, char *argv[])
}
break;
case 'o':
- if ((offset = atoi(optarg)) <= 0) {
+ offset = atoi(optarg);
+ if (offset <= 0) {
fprintf(stderr, "offset must be > 0\n");
prg_usage();
}
break;
case 'i':
- if ((iter = atoi(optarg)) <= 0) {
+ iter = atoi(optarg);
+ if (iter <= 0) {
fprintf(stderr, "iterations must be > 0\n");
prg_usage();
}
@@ -180,14 +180,15 @@ int main(int argc, char *argv[])
setup();
/* Testblock-1: Read with Direct IO, Write without */
- action = READ_DIRECT;
- if ((fd_w = open(filename, O_WRONLY | O_CREAT, 0666)) < 0)
+ fd_w = open(filename, O_WRONLY | O_CREAT, 0666);
+ if (fd_w < 0)
tst_brkm(TBROK | TERRNO, cleanup,
"open(%s, O_WRONLY..) failed", filename);
- if ((fd_r = open(filename, O_DIRECT | O_RDONLY, 0666)) < 0)
+ fd_r = open(filename, O_DIRECT | O_RDONLY, 0666);
+ if (fd_r < 0)
tst_brkm(TBROK | TERRNO, cleanup,
"open(%s, O_DIRECT|O_RDONLY..) failed", filename);
- if (runtest(fd_r, fd_w, iter, offset, action) < 0) {
+ if (runtest(fd_r, fd_w, iter, offset) < 0) {
failed = TRUE;
fail_count++;
tst_resm(TFAIL, "Read with Direct IO, Write without");
@@ -199,14 +200,15 @@ int main(int argc, char *argv[])
total++;
/* Testblock-2: Write with Direct IO, Read without */
- action = WRITE_DIRECT;
- if ((fd_w = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666)) == -1)
+ fd_w = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666);
+ if (fd_w == -1)
tst_brkm(TBROK | TERRNO, cleanup,
"open(%s, O_DIRECT|O_WRONLY..) failed", filename);
- if ((fd_r = open(filename, O_RDONLY | O_CREAT, 0666)) == -1)
+ fd_r = open(filename, O_RDONLY | O_CREAT, 0666);
+ if (fd_r == -1)
tst_brkm(TBROK | TERRNO, cleanup,
"open(%s, O_RDONLY..) failed", filename);
- if (runtest(fd_r, fd_w, iter, offset, action) < 0) {
+ if (runtest(fd_r, fd_w, iter, offset) < 0) {
failed = TRUE;
fail_count++;
tst_resm(TFAIL, "Write with Direct IO, Read without");
@@ -218,16 +220,17 @@ int main(int argc, char *argv[])
total++;
/* Testblock-3: Read, Write with Direct IO. */
- action = RDWR_DIRECT;
- if ((fd_w = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666)) == -1)
+ fd_w = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666);
+ if (fd_w == -1)
tst_brkm(TBROK | TERRNO, cleanup,
"open(%s, O_DIRECT|O_WRONLY|O_CREAT, ..) failed",
filename);
- if ((fd_r = open(filename, O_DIRECT | O_RDONLY | O_CREAT, 0666)) == -1)
+ fd_r = open(filename, O_DIRECT | O_RDONLY | O_CREAT, 0666);
+ if (fd_r == -1)
tst_brkm(TBROK | TERRNO, cleanup,
"open(%s, O_DIRECT|O_RDONLY|O_CREAT, ..) failed",
filename);
- if (runtest(fd_r, fd_w, iter, offset, action) < 0) {
+ if (runtest(fd_r, fd_w, iter, offset) < 0) {
failed = TRUE;
fail_count++;
tst_resm(TFAIL, "Read, Write with Direct IO");
@@ -251,17 +254,24 @@ int main(int argc, char *argv[])
static void setup(void)
{
+
tst_tmpdir();
- if ((fd1 = open(filename, O_CREAT | O_EXCL, 0600)) == -1)
+ fd1 = open(filename, O_CREAT | O_EXCL, 0600);
+ if (fd1 == -1)
tst_brkm(TBROK | TERRNO, cleanup,
"open(%s, O_CREAT|O_EXCL, ..) failed", filename);
close(fd1);
/* Test for filesystem support of O_DIRECT */
- if ((fd1 = open(filename, O_DIRECT, 0600)) == -1)
- tst_brkm(TCONF | TERRNO, cleanup,
- "open(%s, O_DIRECT, ..) failed", filename);
+ fd1 = open(filename, O_DIRECT, 0600);
+ if (fd1 < 0 && errno == EINVAL)
+ tst_brkm(TCONF, cleanup,
+ "O_DIRECT is not supported by this filesystem. %s",
+ strerror(errno));
+ else if (fd1 < 0)
+ tst_brkm(TBROK, cleanup, "Couldn't open test file %s: %s",
+ filename, strerror(errno));
close(fd1);
}
@@ -274,10 +284,3 @@ static void cleanup(void)
tst_rmdir();
}
-
-#else /* O_DIRECT */
-int main()
-{
- tst_brkm(TCONF, NULL, "O_DIRECT is not defined.");
-}
-#endif /* O_DIRECT */
diff --git a/testcases/kernel/io/direct_io/diotest3.c b/testcases/kernel/io/direct_io/diotest3.c
index 5ec4e18..2734afd 100644
--- a/testcases/kernel/io/direct_io/diotest3.c
+++ b/testcases/kernel/io/direct_io/diotest3.c
@@ -1,20 +1,20 @@
/*
+ * Copyright (c) International Business Machines Corp., 2002
+ * 04/30/2002 Narasimha Sharoff nsharoff@us.ibm.com
*
- * Copyright (c) International Business Machines Corp., 2002
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
@@ -37,11 +37,6 @@
* diotest3 [-b bufsize] [-o offset] [-n numchild]
* [-i iterations [-f filename]
*
- * History
- * 04/22/2002 Narasimha Sharoff nsharoff@us.ibm.com
- *
- * RESTRICTIONS
- * None
*/
#include <stdio.h>
@@ -57,10 +52,8 @@
#include "test.h"
-char *TCID = "diotest03"; /* Test program identifier. */
-int TST_TOTAL = 3; /* Total number of test conditions */
-
-#ifdef O_DIRECT
+char *TCID = "diotest03";
+int TST_TOTAL = 3;
#define BUFSIZE 4096
#define TRUE 1
@@ -69,15 +62,21 @@ int TST_TOTAL = 3; /* Total number of test conditions */
#define WRITE_DIRECT 2
#define RDWR_DIRECT 3
-static int iter = 100; /* Iterations. Default 100 */
-static int bufsize = BUFSIZE; /* Buffersize. Default 4k */
-static int offset = 0; /* Offset. Default 0 */
+static void prg_usage(void);
+static int runtest(int fd_r, int fd_w, int childnum, int action);
+static int child_function(int childnum, int action);
+static void cleanup(void);
+static void setup(void);
+
+static int iter = 100;
+static int bufsize = BUFSIZE;
+static int offset;
static char filename[LEN];
/*
* prg_usage: display the program usage
*/
-void prg_usage()
+static void prg_usage(void)
{
fprintf(stderr,
"Usage: diotest3 [-b bufsize] [-o offset] [-n numchild] [-i iterations] [-f filename]\n");
@@ -91,7 +90,7 @@ void prg_usage()
*
* XXX (garrcoop): shouldn't use libltp APIs because it runs forked.
*/
-int runtest(int fd_r, int fd_w, int childnum, int action)
+static int runtest(int fd_r, int fd_w, int childnum, int action)
{
char *buf1;
char *buf2;
@@ -101,11 +100,13 @@ int runtest(int fd_r, int fd_w, int childnum, int action)
/* Allocate for buffers */
seekoff = offset + bufsize * childnum;
- if ((buf1 = valloc(bufsize)) == 0) {
+ buf1 = valloc(bufsize);
+ if (!buf1) {
tst_resm(TFAIL | TERRNO, "valloc for buf1 failed");
return (-1);
}
- if ((buf2 = valloc(bufsize)) == 0) {
+ buf2 = valloc(bufsize);
+ if (!buf2) {
tst_resm(TFAIL | TERRNO, "valloc for buf2 failed");
return (-1);
}
@@ -149,19 +150,21 @@ int runtest(int fd_r, int fd_w, int childnum, int action)
/*
* child_function: open the file for read and write. Call the runtest routine.
*/
-int child_function(int childnum, int action)
+static int child_function(int childnum, int action)
{
int fd_w, fd_r;
switch (action) {
case READ_DIRECT:
- if ((fd_w = open(filename, O_WRONLY | O_CREAT, 0666)) < 0) {
+ fd_w = open(filename, O_WRONLY | O_CREAT, 0666);
+ if (fd_w < 0) {
tst_resm(TFAIL | TERRNO,
"open(%s, O_WRONLY|O_CREAT, ..) failed",
filename);
return (-1);
}
- if ((fd_r = open(filename, O_DIRECT | O_RDONLY, 0666)) < 0) {
+ fd_r = open(filename, O_DIRECT | O_RDONLY, 0666);
+ if (fd_r < 0) {
tst_resm(TFAIL | TERRNO,
"open(%s, O_DIRECT|O_RDONLY, ..) failed",
filename);
@@ -177,13 +180,14 @@ int child_function(int childnum, int action)
}
break;
case WRITE_DIRECT:
- if ((fd_w =
- open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666)) < 0) {
+ fd_w = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666);
+ if (fd_w < 0) {
tst_resm(TFAIL, "fd_w open failed for %s: %s", filename,
strerror(errno));
return (-1);
}
- if ((fd_r = open(filename, O_RDONLY, 0666)) < 0) {
+ fd_r = open(filename, O_RDONLY, 0666);
+ if (fd_r < 0) {
tst_resm(TFAIL, "fd_r open failed for %s: %s",
filename, strerror(errno));
close(fd_w);
@@ -198,13 +202,14 @@ int child_function(int childnum, int action)
}
break;
case RDWR_DIRECT:
- if ((fd_w =
- open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666)) < 0) {
+ fd_w = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666);
+ if (fd_w < 0) {
tst_resm(TFAIL, "fd_w open failed for %s: %s", filename,
strerror(errno));
return (-1);
}
- if ((fd_r = open(filename, O_DIRECT | O_RDONLY, 0666)) < 0) {
+ fd_r = open(filename, O_DIRECT | O_RDONLY, 0666);
+ if (fd_r < 0) {
tst_resm(TFAIL, "fd_r open failed for %s: %s",
filename, strerror(errno));
close(fd_w);
@@ -227,8 +232,6 @@ int child_function(int childnum, int action)
exit(0);
}
-static void setup(void);
-static void cleanup(void);
static int fd1 = -1;
int main(int argc, char *argv[])
@@ -242,7 +245,8 @@ int main(int argc, char *argv[])
while ((i = getopt(argc, argv, "b:o:i:n:f:")) != -1) {
switch (i) {
case 'b':
- if ((bufsize = atoi(optarg)) <= 0) {
+ bufsize = atoi(optarg);
+ if (bufsize <= 0) {
fprintf(stderr, "bufsize must be > 0\n");
prg_usage();
}
@@ -253,19 +257,22 @@ int main(int argc, char *argv[])
}
break;
case 'o':
- if ((offset = atoi(optarg)) <= 0) {
+ offset = atoi(optarg);
+ if (offset <= 0) {
fprintf(stderr, "offset must be > 0\n");
prg_usage();
}
break;
case 'i':
- if ((iter = atoi(optarg)) <= 0) {
+ iter = atoi(optarg);
+ if (iter <= 0) {
fprintf(stderr, "iterations must be > 0\n");
prg_usage();
}
break;
case 'n':
- if ((numchild = atoi(optarg)) <= 0) {
+ numchild = atoi(optarg);
+ if (numchild <= 0) {
fprintf(stderr, "no of children must be > 0\n");
prg_usage();
}
@@ -346,17 +353,24 @@ int main(int argc, char *argv[])
static void setup(void)
{
+
tst_tmpdir();
- if ((fd1 = open(filename, O_CREAT | O_EXCL, 0600)) < 0)
+ fd1 = open(filename, O_CREAT | O_EXCL, 0600);
+ if (fd1 < 0)
tst_brkm(TBROK | TERRNO, cleanup,
"open(%s, O_CREAT|O_EXCL, ..) failed", filename);
close(fd1);
/* Test for filesystem support of O_DIRECT */
- if ((fd1 = open(filename, O_DIRECT, 0600)) < 0)
- tst_brkm(TCONF, cleanup, "open(%s, O_DIRECT, ..) failed",
- filename);
+ fd1 = open(filename, O_DIRECT, 0600);
+ if (fd1 < 0 && errno == EINVAL)
+ tst_brkm(TCONF, cleanup,
+ "O_DIRECT is not supported by this filesystem. %s",
+ strerror(errno));
+ else if (fd1 < 0)
+ tst_brkm(TBROK, cleanup, "Couldn't open test file %s: %s",
+ filename, strerror(errno));
close(fd1);
}
@@ -366,12 +380,4 @@ static void cleanup(void)
unlink(filename);
tst_rmdir();
-
-}
-#else /* O_DIRECT */
-
-int main()
-{
- tst_brkm(TCONF, NULL, "O_DIRECT is not defined.");
}
-#endif /* O_DIRECT */
diff --git a/testcases/kernel/io/direct_io/diotest4.c b/testcases/kernel/io/direct_io/diotest4.c
index e19e48f..3ccf49e 100644
--- a/testcases/kernel/io/direct_io/diotest4.c
+++ b/testcases/kernel/io/direct_io/diotest4.c
@@ -1,20 +1,20 @@
/*
+ * Copyright (c) International Business Machines Corp., 2002
+ * 04/30/2002 Narasimha Sharoff nsharoff@us.ibm.com
*
- * Copyright (c) International Business Machines Corp., 2002
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
@@ -47,12 +47,6 @@
*
* USAGE
* diotest4 [-b filesize_in_blocks]
- *
- * History
- * 04/22/2002 Narasimha Sharoff nsharoff@us.ibm.com
- *
- * RESTRICTIONS
- * None
*/
#include <stdio.h>
@@ -72,13 +66,11 @@
#include "test.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 */
+char *TCID = "diotest4";
+int TST_TOTAL = 17;
+int NO_NFS = 1;
-#ifdef O_DIRECT
-
-#define BUFSIZE 4096
+#define BUFSIZE 4096
#define TRUE 1
#define LEN 30
@@ -88,13 +80,23 @@ int NO_NFS = 1; /* Test on NFS or not */
#define ADDRESS_OF_MAIN main
#endif
+static int fd1 = -1;
+static char filename[LEN];
+
+static void prg_usage(void);
+static int runtest_f(int fd, char *buf, int offset, int count, int errnum,
+ char *msg);
+
+static int runtest_s(int fd, char *buf, int offset, int count, char *msg);
+static void setup(void);
+static void cleanup(void);
+
/*
* runtest_f: Do read, writes. Verify the error value obtained by
* running read or write with the expected error value (errnum).
*/
-int
-runtest_f(int fd, char *buf, int offset, int count, int errnum, int testnum,
- char *msg)
+static int runtest_f(int fd, char *buf, int offset, int count, int errnum,
+ char *msg)
{
int ret;
int l_fail = 0;
@@ -129,13 +131,13 @@ runtest_f(int fd, char *buf, int offset, int count, int errnum, int testnum,
l_fail = TRUE;
}
}
- return (l_fail);
+ return l_fail;
}
/*
* runtest_s: Do read, writes. Verify the they run successfully.
*/
-int runtest_s(int fd, char *buf, int offset, int count, int testnum, char *msg)
+static int runtest_s(int fd, char *buf, int offset, int count, char *msg)
{
int ret;
int l_fail = 0;
@@ -145,7 +147,8 @@ int runtest_s(int fd, char *buf, int offset, int count, int testnum, char *msg)
strerror(errno));
l_fail = TRUE;
} else {
- if ((ret = read(fd, buf, count)) < 0) {
+ ret = read(fd, buf, count);
+ if (ret < 0) {
tst_resm(TFAIL, "read failed for %s. returns %d: %s",
msg, ret, strerror(errno));
l_fail = TRUE;
@@ -156,19 +159,20 @@ int runtest_s(int fd, char *buf, int offset, int count, int testnum, char *msg)
strerror(errno));
l_fail = TRUE;
} else {
- if ((ret = write(fd, buf, count)) < 0) {
+ ret = write(fd, buf, count);
+ if (ret < 0) {
tst_resm(TFAIL, "write failed for %s. returns %d: %s",
msg, ret, strerror(errno));
l_fail = TRUE;
}
}
- return (l_fail);
+ return l_fail;
}
/*
* prg_usage - Display the program usage
*/
-void prg_usage()
+static void prg_usage(void)
{
fprintf(stderr, "Usage: diotest4 [-b filesize_in_blocks]\n");
exit(1);
@@ -184,11 +188,6 @@ static void testcheck_end(int ret, int *failed, int *fail_count, char *msg)
tst_resm(TPASS, "%s", msg);
}
-static void setup(void);
-static void cleanup(void);
-static int fd1 = -1;
-static char filename[LEN];
-
int main(int argc, char *argv[])
{
int fblocks = 1; /* Iterations. Default 1 */
@@ -207,7 +206,8 @@ int main(int argc, char *argv[])
while ((i = getopt(argc, argv, "b:")) != -1) {
switch (i) {
case 'b':
- if ((fblocks = atoi(optarg)) <= 0) {
+ fblocks = atoi(optarg);
+ if (fblocks <= 0) {
fprintf(stderr, "fblocks must be > 0\n");
prg_usage();
}
@@ -220,11 +220,13 @@ int main(int argc, char *argv[])
setup();
/* Open file and fill, allocate for buffer */
- if ((fd = open(filename, O_DIRECT | O_RDWR | O_CREAT, 0666)) < 0) {
+ fd = open(filename, O_DIRECT | O_RDWR | O_CREAT, 0666);
+ if (fd < 0) {
tst_brkm(TBROK, cleanup, "open failed for %s: %s",
filename, strerror(errno));
}
- if ((buf0 = valloc(BUFSIZE)) == NULL) {
+ buf0 = valloc(BUFSIZE);
+ if (buf0 == NULL) {
tst_brkm(TBROK, cleanup, "valloc() buf0 failed: %s",
strerror(errno));
}
@@ -236,11 +238,13 @@ int main(int argc, char *argv[])
}
}
close(fd);
- if ((buf2 = valloc(BUFSIZE)) == NULL) {
+ buf2 = valloc(BUFSIZE);
+ if (buf2 == NULL) {
tst_brkm(TBROK, cleanup, "valloc() buf2 failed: %s",
strerror(errno));
}
- if ((fd = open(filename, O_DIRECT | O_RDWR)) < 0) {
+ fd = open(filename, O_DIRECT | O_RDWR);
+ if (fd < 0) {
tst_brkm(TBROK, cleanup, "open failed for %s: %s",
filename, strerror(errno));
}
@@ -259,18 +263,14 @@ int main(int argc, char *argv[])
tst_resm(TPASS, "Negative Offset");
total++;
- /* Test-2: Removed */
- tst_resm(TPASS, "removed");
-
/* Test-3: Odd count of read and write */
offset = 0;
count = 1;
- lseek(fd, 0, SEEK_SET);
- if (write(fd, buf2, 4096) == -1) {
+ lseek(fd, offset, SEEK_SET);
+ if (write(fd, buf2, 4096) == -1)
tst_resm(TFAIL, "can't write to file %d", ret);
- }
if (NO_NFS) {
- ret = runtest_f(fd, buf2, offset, count, EINVAL, 3, "odd count");
+ ret = runtest_f(fd, buf2, offset, count, EINVAL, "odd count");
testcheck_end(ret, &failed, &fail_count,
"Odd count of read and write");
} else
@@ -303,19 +303,20 @@ int main(int argc, char *argv[])
offset = 4096;
count = bufsize;
newfd = -1;
- ret = runtest_f(newfd, buf2, offset, count, EBADF, 5, "negative fd");
+ ret = runtest_f(newfd, buf2, offset, count, EBADF, "negative fd");
testcheck_end(ret, &failed, &fail_count, "Invalid file descriptor");
total++;
/* Test-6: Out of range file descriptor */
count = bufsize;
offset = 4096;
- if ((newfd = getdtablesize()) < 0) {
+ newfd = getdtablesize();
+ if (newfd < 0) {
tst_resm(TFAIL, "getdtablesize() failed: %s", strerror(errno));
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,
"out of range fd");
testcheck_end(ret, &failed, &fail_count,
"Out of range file descriptor");
@@ -330,20 +331,18 @@ int main(int argc, char *argv[])
tst_brkm(TBROK, cleanup, "can't close fd %d: %s", fd,
strerror(errno));
}
- ret = runtest_f(fd, buf2, offset, count, EBADF, 7, "closed fd");
+ ret = runtest_f(fd, buf2, offset, count, EBADF, "closed fd");
testcheck_end(ret, &failed, &fail_count, "Closed file descriptor");
total++;
- /* Test-9: removed */
- tst_resm(TPASS, "removed");
-
/* Test-9: Character device (/dev/null) read, write */
offset = 0;
count = bufsize;
- if ((newfd = open("/dev/null", O_DIRECT | O_RDWR)) < 0) {
+ newfd = open("/dev/null", O_DIRECT | O_RDWR);
+ if (newfd < 0) {
tst_resm(TCONF, "Direct I/O on /dev/null is not supported");
} else {
- ret = runtest_s(newfd, buf2, offset, count, 9, "/dev/null");
+ ret = runtest_s(newfd, buf2, offset, count, "/dev/null");
testcheck_end(ret, &failed, &fail_count,
"character device read, write");
}
@@ -352,32 +351,35 @@ int main(int argc, char *argv[])
/* Test-10: read, write to a mmaped file */
shm_base = (char *)(((long)sbrk(0) + (shmsz - 1)) & ~(shmsz - 1));
- if (shm_base == NULL) {
+ if (shm_base == NULL)
tst_brkm(TBROK, cleanup, "sbrk failed: %s", strerror(errno));
- }
+
offset = 4096;
count = bufsize;
- if ((fd = open(filename, O_DIRECT | O_RDWR)) < 0) {
+ fd = open(filename, O_DIRECT | O_RDWR);
+ if (fd < 0) {
tst_brkm(TBROK, cleanup, "can't open %s: %s",
filename, strerror(errno));
}
shm_base = mmap(shm_base, 0x100000, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_FIXED, fd, 0);
- if (shm_base == (caddr_t) - 1) {
+ /* check -1 */
+ if (shm_base == ((caddr_t) -1)) {
tst_brkm(TBROK, cleanup, "can't mmap file: %s",
strerror(errno));
}
- ret = runtest_s(fd, buf2, offset, count, 10, "mmapped file");
+ ret = runtest_s(fd, buf2, offset, count, "mmapped file");
testcheck_end(ret, &failed, &fail_count,
"read, write to a mmaped file");
total++;
/* Test-11: read, write to an unmaped file with munmap */
- if ((ret = munmap(shm_base, 0x100000)) < 0) {
+ ret = munmap(shm_base, 0x100000);
+ if (ret < 0) {
tst_brkm(TBROK, cleanup, "can't unmap file: %s",
strerror(errno));
}
- ret = runtest_s(fd, buf2, offset, count, 11, "unmapped file");
+ ret = runtest_s(fd, buf2, offset, count, "unmapped file");
testcheck_end(ret, &failed, &fail_count,
"read, write to an unmapped file");
close(fd);
@@ -386,7 +388,8 @@ int main(int argc, char *argv[])
/* Test-12: read from file not open for reading */
offset = 4096;
count = bufsize;
- if ((fd = open(filename, O_DIRECT | O_WRONLY)) < 0) {
+ fd = open(filename, O_DIRECT | O_WRONLY);
+ if (fd < 0) {
tst_brkm(TBROK, cleanup, "can't open %s: %s",
filename, strerror(errno));
}
@@ -412,7 +415,8 @@ int main(int argc, char *argv[])
/* Test-13: write to file not open for writing */
offset = 4096;
count = bufsize;
- if ((fd = open(filename, O_DIRECT | O_RDONLY)) < 0) {
+ fd = open(filename, O_DIRECT | O_RDONLY);
+ if (fd < 0) {
tst_brkm(TBROK, cleanup, "can't open %s: %s",
filename, strerror(errno));
}
@@ -438,13 +442,14 @@ int main(int argc, char *argv[])
/* Test-14: read, write with non-aligned buffer */
offset = 4096;
count = bufsize;
- if ((fd = open(filename, O_DIRECT | O_RDWR)) < 0) {
+ fd = open(filename, O_DIRECT | O_RDWR);
+ if (fd < 0) {
tst_brkm(TBROK, cleanup, "can't open %s: %s",
filename, strerror(errno));
}
if (NO_NFS) {
- ret = runtest_f(fd, buf2 + 1, offset, count, EINVAL, 14,
- " nonaligned buf");
+ ret = runtest_f(fd, buf2 + 1, offset, count, EINVAL,
+ " nonaligned buf");
testcheck_end(ret, &failed, &fail_count,
"read, write with non-aligned buffer");
} else
@@ -456,7 +461,8 @@ int main(int argc, char *argv[])
offset = 4096;
count = bufsize;
l_fail = 0;
- if ((fd = open(filename, O_DIRECT | O_RDWR)) < 0) {
+ fd = open(filename, O_DIRECT | O_RDWR);
+ if (fd < 0) {
tst_brkm(TBROK, cleanup, "can't open %s: %s",
filename, strerror(errno));
}
@@ -497,15 +503,15 @@ int main(int argc, char *argv[])
/* Test-16: read, write in non-existant space */
offset = 4096;
count = bufsize;
- if ((buf1 =
- (char *)(((long)sbrk(0) + (shmsz - 1)) & ~(shmsz - 1))) == NULL) {
+ buf1 = (char *)(((long)sbrk(0) + (shmsz - 1)) & ~(shmsz - 1));
+ if (buf1 == NULL)
tst_brkm(TBROK | TERRNO, cleanup, "sbrk failed");
- }
- if ((fd = open(filename, O_DIRECT | O_RDWR)) < 0) {
+ fd = open(filename, O_DIRECT | O_RDWR);
+ if (fd < 0)
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,
" nonexistant space");
testcheck_end(ret, &failed, &fail_count,
"read, write in non-existant space");
@@ -515,11 +521,12 @@ int main(int argc, char *argv[])
/* Test-17: read, write for file with O_SYNC */
offset = 4096;
count = bufsize;
- if ((fd = open(filename, O_DIRECT | O_RDWR | O_SYNC)) < 0) {
+ fd = open(filename, O_DIRECT | O_RDWR | O_SYNC);
+ if (fd < 0) {
tst_brkm(TBROK, cleanup,
"open(%s, O_DIRECT|O_RDWR|O_SYNC failed)", filename);
}
- ret = runtest_s(fd, buf2, offset, count, 17, "opened with O_SYNC");
+ ret = runtest_s(fd, buf2, offset, count, "opened with O_SYNC");
testcheck_end(ret, &failed, &fail_count,
"read, write for file with O_SYNC");
total++;
@@ -547,21 +554,25 @@ static void setup(void)
(void)sigaction(SIGXFSZ, &act, NULL);
sprintf(filename, "testdata-4.%ld", syscall(__NR_gettid));
- if ((fd1 = open(filename, O_CREAT | O_EXCL, 0600)) < 0) {
+ fd1 = open(filename, O_CREAT | O_EXCL, 0600);
+ if (fd1 < 0) {
tst_brkm(TBROK, cleanup, "Couldn't create test file %s: %s",
filename, strerror(errno));
}
close(fd1);
/* Test for filesystem support of O_DIRECT */
- if ((fd1 = open(filename, O_DIRECT, 0600)) < 0) {
+ fd1 = open(filename, O_DIRECT, 0600);
+ if (fd1 < 0 && errno == EINVAL)
tst_brkm(TCONF, cleanup,
"O_DIRECT is not supported by this filesystem. %s",
strerror(errno));
- }
+ else if (fd1 < 0)
+ tst_brkm(TBROK, cleanup, "Couldn't open test file %s: %s",
+ filename, strerror(errno));
+
close(fd1);
- /* On NFS or not */
if (tst_fs_type(cleanup, ".") == TST_NFS_MAGIC)
NO_NFS = 0;
}
@@ -574,11 +585,3 @@ static void cleanup(void)
tst_rmdir();
}
-
-#else /* O_DIRECT */
-
-int main()
-{
- tst_brkm(TCONF, NULL, "O_DIRECT is not defined.");
-}
-#endif /* O_DIRECT */
diff --git a/testcases/kernel/io/direct_io/diotest5.c b/testcases/kernel/io/direct_io/diotest5.c
index fadcce2..0c10742 100644
--- a/testcases/kernel/io/direct_io/diotest5.c
+++ b/testcases/kernel/io/direct_io/diotest5.c
@@ -1,20 +1,20 @@
/*
+ * Copyright (c) International Business Machines Corp., 2002
+ * 04/30/2002 Narasimha Sharoff nsharoff@us.ibm.com
*
- * Copyright (c) International Business Machines Corp., 2002
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
@@ -32,18 +32,13 @@
* value marks the starting position in file from where to start the
* write and read. (Using larger offset, larger files can be tested).
* The nvector gives vector array size. Test data file can be
- * specified through commandline and is useful for running test with
- * raw devices as a file.
+ * specified through commandline and is useful for running test with
+ * raw devices as a file.
*
* USAGE
* diotest5 [-b bufsize] [-o offset] [-i iterations]
* [-v nvector] [-f filename]
*
- * History
- * 04/29/2002 Narasimha Sharoff nsharoff@us.ibm.com
- *
- * RESTRICTIONS
- * None
*/
#include <stdio.h>
@@ -60,10 +55,8 @@
#include "test.h"
-char *TCID = "diotest05"; /* Test program identifier. */
-int TST_TOTAL = 3; /* Total number of test conditions */
-
-#ifdef O_DIRECT
+char *TCID = "diotest05";
+int TST_TOTAL = 3;
#define BUFSIZE 4096
#define TRUE 1
@@ -75,31 +68,39 @@ int TST_TOTAL = 3; /* Total number of test conditions */
static int bufsize = BUFSIZE; /* Buffer size. Default 4k */
static int iter = 20; /* Iterations. Default 20 */
static int nvector = 20; /* Vector array. Default 20 */
-static off64_t offset = 0; /* Start offset. Default 0 */
+static off64_t offset; /* Start offset. Default 0 */
static char filename[LEN]; /* Test data file */
static int fd1 = -1;
+
+static void setup(void);
+static void cleanup(void);
+static int runtest(int fd_r, int fd_w, int iter, off64_t offset);
+static void prg_usage(void);
+
/*
* runtest: Write the data in vector array to the file. Read the data
* from the file into another vectory array and verify. Repeat the test.
*/
-int runtest(int fd_r, int fd_w, int iter, off64_t offset, int action)
+static int runtest(int fd_r, int fd_w, int iter, off64_t offset)
{
int i, bufsize = BUFSIZE;
struct iovec *iov1, *iov2, *iovp;
/* Allocate for buffers and data pointers */
- if ((iov1 =
- (struct iovec *)valloc(sizeof(struct iovec) * nvector)) == NULL) {
+ iov1 = (struct iovec *) valloc(sizeof(struct iovec) * nvector);
+ if (iov1 == NULL) {
tst_resm(TFAIL, "valloc() buf1 failed: %s", strerror(errno));
return (-1);
}
- if ((iov2 =
- (struct iovec *)valloc(sizeof(struct iovec) * nvector)) == NULL) {
+
+ iov2 = (struct iovec *) valloc(sizeof(struct iovec) * nvector);
+ if (iov2 == NULL) {
tst_resm(TFAIL, "valloc buf2 failed: %s", strerror(errno));
return (-1);
}
for (i = 0, iovp = iov1; i < nvector; iovp++, i++) {
- if ((iovp->iov_base = valloc(bufsize)) == NULL) {
+ iovp->iov_base = valloc(bufsize);
+ if (iovp->iov_base == NULL) {
tst_resm(TFAIL, "valloc for iovp->iov_base: %s",
strerror(errno));
return (-1);
@@ -107,7 +108,8 @@ int runtest(int fd_r, int fd_w, int iter, off64_t offset, int action)
iovp->iov_len = bufsize;
}
for (i = 0, iovp = iov2; i < nvector; iovp++, i++) {
- if ((iovp->iov_base = valloc(bufsize)) == NULL) {
+ iovp->iov_base = valloc(bufsize);
+ if (iovp->iov_base == NULL) {
tst_resm(TFAIL, "valloc, iov2 for iovp->iov_base: %s",
strerror(errno));
return (-1);
@@ -144,12 +146,10 @@ int runtest(int fd_r, int fd_w, int iter, off64_t offset, int action)
}
/* Cleanup */
- for (i = 0, iovp = iov1; i < nvector; iovp++, i++) {
+ for (i = 0, iovp = iov1; i < nvector; iovp++, i++)
free(iovp->iov_base);
- }
- for (i = 0, iovp = iov2; i < nvector; iovp++, i++) {
+ for (i = 0, iovp = iov2; i < nvector; iovp++, i++)
free(iovp->iov_base);
- }
free(iov1);
free(iov2);
return 0;
@@ -158,19 +158,16 @@ int runtest(int fd_r, int fd_w, int iter, off64_t offset, int action)
/*
* prg_usage: Display the program usage
*/
-void prg_usage()
+static void prg_usage(void)
{
fprintf(stderr,
"Usage: diotest5 [-b bufsize] [-o offset] [ -i iteration] [ -v nvector] [-f filename]\n");
exit(1);
}
-static void setup(void);
-static void cleanup(void);
-
int main(int argc, char *argv[])
{
- int i, action, fd_r, fd_w;
+ int i, fd_r, fd_w;
int fail_count = 0, total = 0, failed = 0;
/* Options */
@@ -178,7 +175,8 @@ int main(int argc, char *argv[])
while ((i = getopt(argc, argv, "b:o:i:v:f:")) != -1) {
switch (i) {
case 'b':
- if ((bufsize = atoi(optarg)) <= 0) {
+ bufsize = atoi(optarg);
+ if (bufsize <= 0) {
fprintf(stderr, "bufsize must be > 0");
prg_usage();
}
@@ -188,19 +186,22 @@ int main(int argc, char *argv[])
}
break;
case 'o':
- if ((offset = atoll(optarg)) <= 0) {
+ offset = atoll(optarg);
+ if (offset <= 0) {
fprintf(stderr, "offset must be > 0");
prg_usage();
}
break;
case 'i':
- if ((iter = atoi(optarg)) <= 0) {
+ iter = atoi(optarg);
+ if (iter <= 0) {
fprintf(stderr, "iterations must be > 0");
prg_usage();
}
break;
case 'v':
- if ((nvector = atoi(optarg)) <= 0) {
+ nvector = atoi(optarg);
+ if (nvector <= 0) {
fprintf(stderr, "vector array must be > 0");
prg_usage();
}
@@ -216,16 +217,17 @@ int main(int argc, char *argv[])
setup();
/* Testblock-1: Read with Direct IO, Write without */
- action = READ_DIRECT;
- if ((fd_w = open(filename, O_WRONLY | O_CREAT, 0666)) < 0) {
+ fd_w = open(filename, O_WRONLY | O_CREAT, 0666);
+ if (fd_w < 0) {
tst_brkm(TBROK, cleanup, "fd_w open failed for %s: %s",
filename, strerror(errno));
}
- if ((fd_r = open64(filename, O_DIRECT | O_RDONLY | O_CREAT, 0666)) < 0) {
+ fd_r = open64(filename, O_DIRECT | O_RDONLY | O_CREAT, 0666);
+ if (fd_r < 0) {
tst_brkm(TBROK, cleanup, "fd_r open failed for %s: %s",
filename, strerror(errno));
}
- if (runtest(fd_r, fd_w, iter, offset, action) < 0) {
+ if (runtest(fd_r, fd_w, iter, offset) < 0) {
failed = TRUE;
fail_count++;
tst_resm(TFAIL, "Read with Direct IO, Write without");
@@ -238,16 +240,18 @@ int main(int argc, char *argv[])
total++;
/* Testblock-2: Write with Direct IO, Read without */
- action = WRITE_DIRECT;
- if ((fd_w = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666)) < 0) {
+
+ fd_w = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666);
+ if (fd_w < 0) {
tst_brkm(TBROK, cleanup, "fd_w open failed for %s: %s",
filename, strerror(errno));
}
- if ((fd_r = open64(filename, O_RDONLY | O_CREAT, 0666)) < 0) {
+ fd_r = open64(filename, O_RDONLY | O_CREAT, 0666);
+ if (fd_r < 0) {
tst_brkm(TBROK, cleanup, "fd_r open failed for %s: %s",
filename, strerror(errno));
}
- if (runtest(fd_r, fd_w, iter, offset, action) < 0) {
+ if (runtest(fd_r, fd_w, iter, offset) < 0) {
failed = TRUE;
fail_count++;
tst_resm(TFAIL, "Write with Direct IO, Read without");
@@ -259,16 +263,18 @@ int main(int argc, char *argv[])
total++;
/* Testblock-3: Read, Write with Direct IO */
- action = RDWR_DIRECT;
- if ((fd_w = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666)) < 0) {
+ fd_w = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666);
+ if (fd_w < 0) {
tst_brkm(TBROK, cleanup, "fd_w open failed for %s: %s",
filename, strerror(errno));
}
- if ((fd_r = open64(filename, O_DIRECT | O_RDONLY | O_CREAT, 0666)) < 0) {
+
+ fd_r = open64(filename, O_DIRECT | O_RDONLY | O_CREAT, 0666);
+ if (fd_r < 0) {
tst_brkm(TBROK, cleanup, "fd_r open failed for %s: %s",
filename, strerror(errno));
}
- if (runtest(fd_r, fd_w, iter, offset, action) < 0) {
+ if (runtest(fd_r, fd_w, iter, offset) < 0) {
failed = TRUE;
fail_count++;
tst_resm(TFAIL, "Read, Write with Direct IO");
@@ -293,20 +299,25 @@ int main(int argc, char *argv[])
static void setup(void)
{
+
tst_tmpdir();
- if ((fd1 = open(filename, O_CREAT | O_EXCL, 0600)) < 0) {
+ fd1 = open(filename, O_CREAT | O_EXCL, 0600);
+ if (fd1 < 0) {
tst_brkm(TBROK, cleanup, "Couldn't create test file %s: %s",
filename, strerror(errno));
}
close(fd1);
/* Test for filesystem support of O_DIRECT */
- if ((fd1 = open(filename, O_DIRECT, 0600)) < 0) {
+ fd1 = open(filename, O_DIRECT, 0600);
+ if (fd1 < 0 && errno == EINVAL)
tst_brkm(TCONF, cleanup,
"O_DIRECT is not supported by this filesystem. %s",
strerror(errno));
- }
+ else if (fd1 < 0)
+ tst_brkm(TBROK, cleanup, "Couldn't open test file %s: %s",
+ filename, strerror(errno));
close(fd1);
}
@@ -316,14 +327,4 @@ static void cleanup(void)
unlink(filename);
tst_rmdir();
-
-}
-#else /* O_DIRECT */
-
-int main()
-{
-
- tst_resm(TCONF, "O_DIRECT is not defined.");
- return 0;
}
-#endif /* O_DIRECT */
diff --git a/testcases/kernel/io/direct_io/diotest6.c b/testcases/kernel/io/direct_io/diotest6.c
index 119aafb..221b254 100644
--- a/testcases/kernel/io/direct_io/diotest6.c
+++ b/testcases/kernel/io/direct_io/diotest6.c
@@ -51,8 +51,6 @@
char *TCID = "diotest06";
int TST_TOTAL = 3;
-#ifdef O_DIRECT
-
#define BUFSIZE 4096
#define TRUE 1
#define LEN 30
@@ -62,7 +60,7 @@ int TST_TOTAL = 3;
static int iter = 100;
static int bufsize = BUFSIZE;
-static off64_t offset = 0;
+static off64_t offset;
static int nvector = 20;
static char filename[LEN];
static int fd1 = -1;
@@ -86,6 +84,7 @@ int runtest(int fd_r, int fd_w, int childnum, int action)
{
off64_t seekoff;
int i, bufsize = BUFSIZE;
+ int ret;
char *buf1, *buf2;
buf1 = valloc(BUFSIZE);
@@ -127,8 +126,9 @@ int runtest(int fd_r, int fd_w, int childnum, int action)
strerror(errno));
return (-1);
}
- int ret;
- if ((ret = read(fd_r, buf2, bufsize)) < bufsize) {
+ ret = read(fd_r, buf2, bufsize);
+
+ if (ret < bufsize) {
tst_resm(TFAIL, "read failed: %s", strerror(errno));
return (-1);
}
@@ -144,18 +144,20 @@ int runtest(int fd_r, int fd_w, int childnum, int action)
/*
* child_function: open the file for read and write. Call the runtest routine.
*/
-int child_function(int childnum, int action)
+static int child_function(int childnum, int action)
{
int fd_w, fd_r;
switch (action) {
case READ_DIRECT:
- if ((fd_w = open(filename, O_WRONLY | O_CREAT, 0666)) < 0) {
+ fd_w = open(filename, O_WRONLY | O_CREAT, 0666);
+ if (fd_w < 0) {
tst_resm(TFAIL, "fd_w open failed for %s: %s",
filename, strerror(errno));
return (-1);
}
- if ((fd_r = open(filename, O_DIRECT | O_RDONLY, 0666)) < 0) {
+ fd_r = open(filename, O_DIRECT | O_RDONLY, 0666);
+ if (fd_r < 0) {
tst_resm(TFAIL, "fd_r open failed for %s: %s",
filename, strerror(errno));
close(fd_w);
@@ -171,13 +173,14 @@ int child_function(int childnum, int action)
}
break;
case WRITE_DIRECT:
- if ((fd_w =
- open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666)) < 0) {
+ fd_w = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666);
+ if (fd_w < 0) {
tst_resm(TFAIL, "fd_w open failed for %s: %s", filename,
strerror(errno));
return (-1);
}
- if ((fd_r = open(filename, O_RDONLY, 0666)) < 0) {
+ fd_r = open(filename, O_RDONLY, 0666);
+ if (fd_r < 0) {
tst_resm(TFAIL, "fd_r open failed for %s: %s",
filename, strerror(errno));
close(fd_w);
@@ -193,13 +196,14 @@ int child_function(int childnum, int action)
}
break;
case RDWR_DIRECT:
- if ((fd_w =
- open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666)) < 0) {
+ fd_w = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666);
+ if (fd_w < 0) {
tst_resm(TFAIL, "fd_w open failed for %s: %s", filename,
strerror(errno));
return (-1);
}
- if ((fd_r = open(filename, O_DIRECT | O_RDONLY, 0666)) < 0) {
+ fd_r = open(filename, O_DIRECT | O_RDONLY, 0666);
+ if (fd_r < 0) {
tst_resm(TFAIL, "fd_r open failed for %s: %s",
filename, strerror(errno));
close(fd_w);
@@ -233,7 +237,8 @@ int main(int argc, char *argv[])
while ((i = getopt(argc, argv, "b:o:i:n:v:f:")) != -1) {
switch (i) {
case 'b':
- if ((bufsize = atoi(optarg)) <= 0) {
+ bufsize = atoi(optarg);
+ if ((bufsize) <= 0) {
fprintf(stderr, "bufsize must be > 0\n");
prg_usage();
}
@@ -244,25 +249,29 @@ int main(int argc, char *argv[])
}
break;
case 'o':
- if ((offset = atoi(optarg)) <= 0) {
+ offset = atoi(optarg);
+ if (offset <= 0) {
fprintf(stderr, "offset must be > 0\n");
prg_usage();
}
break;
case 'i':
- if ((iter = atoi(optarg)) <= 0) {
+ iter = atoi(optarg);
+ if (iter <= 0) {
fprintf(stderr, "iterations must be > 0\n");
prg_usage();
}
break;
case 'n':
- if ((numchild = atoi(optarg)) <= 0) {
+ numchild = atoi(optarg);
+ if (numchild <= 0) {
fprintf(stderr, "no of children must be > 0\n");
prg_usage();
}
break;
case 'v':
- if ((nvector = atoi(optarg)) <= 0) {
+ nvector = atoi(optarg);
+ if (nvector <= 0) {
fprintf(stderr, "vectory array must be > 0\n");
prg_usage();
}
@@ -343,18 +352,22 @@ static void setup(void)
{
tst_tmpdir();
- if ((fd1 = open(filename, O_CREAT | O_EXCL, 0600)) < 0) {
+ fd1 = open(filename, O_CREAT | O_EXCL, 0600);
+ if (fd1 < 0) {
tst_brkm(TBROK, cleanup, "Couldn't create test file %s: %s",
filename, strerror(errno));
}
close(fd1);
/* Test for filesystem support of O_DIRECT */
- if ((fd1 = open(filename, O_DIRECT, 0600)) < 0) {
+ fd1 = open(filename, O_DIRECT, 0600);
+ if (fd1 < 0 && errno == EINVAL)
tst_brkm(TCONF, cleanup,
"O_DIRECT is not supported by this filesystem. %s",
strerror(errno));
- }
+ else if (fd1 < 0)
+ tst_brkm(TBROK, cleanup, "Couldn't open test file %s: %s",
+ filename, strerror(errno));
close(fd1);
}
@@ -365,12 +378,3 @@ static void cleanup(void)
tst_rmdir();
}
-
-#else /* O_DIRECT */
-
-int main(void)
-{
- tst_brkm(TCONF, NULL, "O_DIRECT is not defined.");
-}
-
-#endif /* O_DIRECT */
diff --git a/testcases/kernel/io/direct_io/diotest_routines.c b/testcases/kernel/io/direct_io/diotest_routines.c
index fe03630..3d98165 100644
--- a/testcases/kernel/io/direct_io/diotest_routines.c
+++ b/testcases/kernel/io/direct_io/diotest_routines.c
@@ -1,20 +1,20 @@
/*
+ * Copyright (c) International Business Machines Corp., 2002
+ * 04/30/2002 Narasimha Sharoff nsharoff@us.ibm.com
*
- * Copyright (c) International Business Machines Corp., 2002
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
@@ -45,6 +45,8 @@
#include <unistd.h>
#include <ctype.h>
+#include "test.h"
+#include "safe_macros.h"
#include "diotest_routines.h"
/* **** Routines for buffer actions, comparisions **** */
@@ -55,20 +57,15 @@
*/
void fillbuf(char *buf, int count, char value)
{
- while (count > 0) {
- strncpy(buf, &value, 1);
- buf++;
- count = count - 1;
- }
+ memset(buf, value, count);
}
void vfillbuf(struct iovec *iv, int vcnt, char value)
{
int i;
- for (i = 0; i < vcnt; iv++, i++) {
+ for (i = 0; i < vcnt; iv++, i++)
fillbuf(iv->iov_base, iv->iov_len, (char)value);
- }
}
/*
@@ -84,10 +81,10 @@ int bufcmp(char *b1, char *b2, int bsize)
fprintf(stderr,
"bufcmp: offset %d: Expected: 0x%x, got 0x%x\n",
i, b1[i], b2[i]);
- return (-1);
+ return -1;
}
}
- return (0);
+ return 0;
}
int vbufcmp(struct iovec *iv1, struct iovec *iv2, int vcnt)
@@ -116,16 +113,18 @@ int filecmp(char *f1, char *f2)
char buf1[BUFSIZ], buf2[BUFSIZ];
/* Open the file for read */
- if ((fd1 = open(f1, O_RDONLY)) == -1) {
+ fd1 = open(f1, O_RDONLY);
+ if (fd1 == -1) {
fprintf(stderr, "compare_files: open failed %s: %s",
f1, strerror(errno));
- return (-1);
+ return -1;
}
- if ((fd2 = open(f2, O_RDONLY)) == -1) {
+ fd2 = open(f2, O_RDONLY);
+ if (fd2 == -1) {
fprintf(stderr, "compare_files: open failed %s: %s",
f2, strerror(errno));
close(fd1);
- return (-1);
+ return -1;
}
/* Compare the files */
@@ -137,7 +136,7 @@ int filecmp(char *f1, char *f2)
ret1, f1, ret2, f2);
close(fd1);
close(fd2);
- return (-1);
+ return -1;
}
for (i = 0; i < ret1; i++) {
if (strncmp(&buf1[i], &buf2[i], 1)) {
@@ -150,7 +149,7 @@ int filecmp(char *f1, char *f2)
isprint(buf2[i]) ? buf2[i] : '.');
close(fd1);
close(fd2);
- return (-1);
+ return -1;
}
}
}
@@ -169,13 +168,15 @@ int forkchldrn(int **pidlst, int numchld, int action, int (*chldfunc) ())
{
int i, cpid;
- if ((*pidlst = ((int *)malloc(sizeof(int) * numchld))) == 0) {
+ *pidlst = ((int *) malloc(sizeof(int) * numchld));
+ if (*pidlst == NULL) {
fprintf(stderr, "forkchldrn: calloc failed for pidlst: %s\n",
strerror(errno));
return (-1);
}
for (i = 0; i < numchld; i++) {
- if ((cpid = fork()) < 0) {
+ cpid = tst_fork();
+ if (cpid < 0) {
fprintf(stderr,
"forkchldrn: fork child %d failed, %s\n", i,
strerror(errno));
@@ -209,7 +210,7 @@ int killchldrn(int **pidlst, int numchld, int sig)
}
}
}
- return (errflag);
+ return errflag;
}
/*
@@ -224,7 +225,8 @@ int waitchldrn(int **pidlst, int numchld)
cpid = *(*pidlst + i);
if (cpid == 0)
continue;
- if ((ret = waitpid(cpid, &status, 0)) != cpid) {
+ ret = waitpid(cpid, &status, 0);
+ if (ret != cpid) {
fprintf(stderr,
"waitchldrn: wait failed for child %d, pid %d: %s\n",
i, cpid, strerror(errno));
@@ -233,5 +235,5 @@ int waitchldrn(int **pidlst, int numchld)
if (status)
errflag = -1;
}
- return (errflag);
+ return errflag;
}
diff --git a/testcases/kernel/io/direct_io/diotest_routines.h b/testcases/kernel/io/direct_io/diotest_routines.h
index e09889f..f5dd746 100644
--- a/testcases/kernel/io/direct_io/diotest_routines.h
+++ b/testcases/kernel/io/direct_io/diotest_routines.h
@@ -1,12 +1,34 @@
-struct iovec;
-extern void fillbuf(char *buf, int count, char value);
-extern void vfillbuf(struct iovec *iv, int vcnt, char value);
-extern int filecmp(char *f1, char *f2);
-extern int bufcmp(char *b1, char *b2, int bsize);
-extern int vbufcmp(struct iovec *iv1, struct iovec *iv2, int vcnt);
+/*
+ * Copyright (c) International Business Machines Corp., 2002
+ * 04/30/2002 Narasimha Sharoff nsharoff@us.ibm.com
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
-extern int forkchldrn(int **pidlst, int numchld, int action, int (*chldfunc)());
-extern int waitchldrn(int **pidlst, int numchld);
-extern int killchldrn(int **pidlst, int numchld, int sig);
+#ifndef DIOTEST_ROUTINES_H
+#define DIOTEST_ROUTINES_H
+#include "lapi/fcntl.h"
+void fillbuf(char *buf, int count, char value);
+void vfillbuf(struct iovec *iv, int vcnt, char value);
+int filecmp(char *f1, char *f2);
+int bufcmp(char *b1, char *b2, int bsize);
+int vbufcmp(struct iovec *iv1, struct iovec *iv2, int vcnt);
+int forkchldrn(int **pidlst, int numchld, int action, int (*chldfunc)());
+int waitchldrn(int **pidlst, int numchld);
+int killchldrn(int **pidlst, int numchld, int sig);
+
+#endif /* DIOTEST_ROUTINES_H */
--
2.1.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [LTP] [PATCH 2/3] diotest4.c: Fixed filesystem
2015-10-29 16:55 [LTP] [PATCH 1/3] diotest: cleanup & fix Cedric Hnyda
@ 2015-10-29 16:55 ` Cedric Hnyda
2015-10-29 16:55 ` [LTP] [PATCH 3/3] diotest5.c: replaced iovec Cedric Hnyda
2015-11-04 12:41 ` [LTP] [PATCH 1/3] diotest: cleanup & fix Cyril Hrubis
2 siblings, 0 replies; 6+ messages in thread
From: Cedric Hnyda @ 2015-10-29 16:55 UTC (permalink / raw)
To: ltp
Test 3 & 14 were failing for BTRFS
so add TCONF for BTRFS
Signed-off-by: Cedric Hnyda <chnyda@suse.com>
---
testcases/kernel/io/direct_io/diotest4.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/testcases/kernel/io/direct_io/diotest4.c b/testcases/kernel/io/direct_io/diotest4.c
index 3ccf49e..6badd93 100644
--- a/testcases/kernel/io/direct_io/diotest4.c
+++ b/testcases/kernel/io/direct_io/diotest4.c
@@ -68,7 +68,7 @@
char *TCID = "diotest4";
int TST_TOTAL = 17;
-int NO_NFS = 1;
+static long fs_type;
#define BUFSIZE 4096
#define TRUE 1
@@ -269,12 +269,12 @@ int main(int argc, char *argv[])
lseek(fd, offset, SEEK_SET);
if (write(fd, buf2, 4096) == -1)
tst_resm(TFAIL, "can't write to file %d", ret);
- if (NO_NFS) {
+ if (fs_type != TST_NFS_MAGIC && fs_type != TST_BTRFS_MAGIC) {
ret = runtest_f(fd, buf2, offset, count, EINVAL, "odd count");
testcheck_end(ret, &failed, &fail_count,
"Odd count of read and write");
} else
- tst_resm(TCONF, "NFS support odd count IO");
+ tst_resm(TCONF, "filesystem supports odd count IO");
total++;
/* Test-4: Read beyond the file size */
@@ -447,13 +447,13 @@ int main(int argc, char *argv[])
tst_brkm(TBROK, cleanup, "can't open %s: %s",
filename, strerror(errno));
}
- if (NO_NFS) {
+ if (fs_type != TST_NFS_MAGIC && fs_type != TST_BTRFS_MAGIC) {
ret = runtest_f(fd, buf2 + 1, offset, count, EINVAL,
" nonaligned buf");
testcheck_end(ret, &failed, &fail_count,
"read, write with non-aligned buffer");
} else
- tst_resm(TCONF, "NFS support read, write with non-aligned buffer");
+ tst_resm(TCONF, "filesystem supports read, write with non-aligned buffer");
close(fd);
total++;
@@ -573,8 +573,7 @@ static void setup(void)
close(fd1);
- if (tst_fs_type(cleanup, ".") == TST_NFS_MAGIC)
- NO_NFS = 0;
+ fs_type = tst_fs_type(cleanup, ".");
}
static void cleanup(void)
--
2.1.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [LTP] [PATCH 3/3] diotest5.c: replaced iovec
2015-10-29 16:55 [LTP] [PATCH 1/3] diotest: cleanup & fix Cedric Hnyda
2015-10-29 16:55 ` [LTP] [PATCH 2/3] diotest4.c: Fixed filesystem Cedric Hnyda
@ 2015-10-29 16:55 ` Cedric Hnyda
2015-10-30 8:53 ` Jan Stancek
2015-11-04 12:41 ` [LTP] [PATCH 1/3] diotest: cleanup & fix Cyril Hrubis
2 siblings, 1 reply; 6+ messages in thread
From: Cedric Hnyda @ 2015-10-29 16:55 UTC (permalink / raw)
To: ltp
Replaced iovec pointers by normal buffers.
iovec were passed instead of expected buffers.
Signed-off-by: Cedric Hnyda <chnyda@suse.com>
---
testcases/kernel/io/direct_io/diotest5.c | 54 +++++++++-----------------------
1 file changed, 14 insertions(+), 40 deletions(-)
diff --git a/testcases/kernel/io/direct_io/diotest5.c b/testcases/kernel/io/direct_io/diotest5.c
index 0c10742..e5946bd 100644
--- a/testcases/kernel/io/direct_io/diotest5.c
+++ b/testcases/kernel/io/direct_io/diotest5.c
@@ -84,49 +84,30 @@ static void prg_usage(void);
static int runtest(int fd_r, int fd_w, int iter, off64_t offset)
{
int i, bufsize = BUFSIZE;
- struct iovec *iov1, *iov2, *iovp;
/* Allocate for buffers and data pointers */
- iov1 = (struct iovec *) valloc(sizeof(struct iovec) * nvector);
- if (iov1 == NULL) {
- tst_resm(TFAIL, "valloc() buf1 failed: %s", strerror(errno));
- return (-1);
- }
+ char *buf1, *buf2;
- iov2 = (struct iovec *) valloc(sizeof(struct iovec) * nvector);
- if (iov2 == NULL) {
- tst_resm(TFAIL, "valloc buf2 failed: %s", strerror(errno));
- return (-1);
- }
- for (i = 0, iovp = iov1; i < nvector; iovp++, i++) {
- iovp->iov_base = valloc(bufsize);
- if (iovp->iov_base == NULL) {
- tst_resm(TFAIL, "valloc for iovp->iov_base: %s",
- strerror(errno));
- return (-1);
- }
- iovp->iov_len = bufsize;
- }
- for (i = 0, iovp = iov2; i < nvector; iovp++, i++) {
- iovp->iov_base = valloc(bufsize);
- if (iovp->iov_base == NULL) {
- tst_resm(TFAIL, "valloc, iov2 for iovp->iov_base: %s",
- strerror(errno));
- return (-1);
- }
- iovp->iov_len = bufsize;
+ buf1 = valloc(bufsize);
+ buf2 = valloc(bufsize);
+
+ if (!buf1 || !buf2) {
+ tst_resm(TBROK | TERRNO, "valloc() failed");
+ free(buf1);
+ free(buf2);
+ return -1;
}
/* Test */
for (i = 0; i < iter; i++) {
- vfillbuf(iov1, nvector, i);
- vfillbuf(iov2, nvector, i + 1);
+ fillbuf(buf1, bufsize, i);
+ fillbuf(buf2, bufsize, i + 1);
if (lseek(fd_w, offset, SEEK_SET) < 0) {
tst_resm(TFAIL, "lseek before writev failed: %s",
strerror(errno));
return (-1);
}
- if (writev(fd_w, iov1, nvector) < 0) {
+ if (write(fd_w, buf1, bufsize) < 0) {
tst_resm(TFAIL, "writev failed: %s", strerror(errno));
return (-1);
}
@@ -135,23 +116,16 @@ static int runtest(int fd_r, int fd_w, int iter, off64_t offset)
strerror(errno));
return (-1);
}
- if (readv(fd_r, iov2, nvector) < 0) {
+ if (read(fd_r, buf2, bufsize) < 0) {
tst_resm(TFAIL, "readv failed: %s", strerror(errno));
return (-1);
}
- if (vbufcmp(iov1, iov2, nvector) != 0) {
+ if (bufcmp(buf1, buf2, bufsize) != 0) {
tst_resm(TFAIL, "readv/writev comparision failed");
return (-1);
}
}
- /* Cleanup */
- for (i = 0, iovp = iov1; i < nvector; iovp++, i++)
- free(iovp->iov_base);
- for (i = 0, iovp = iov2; i < nvector; iovp++, i++)
- free(iovp->iov_base);
- free(iov1);
- free(iov2);
return 0;
}
--
2.1.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [LTP] [PATCH 3/3] diotest5.c: replaced iovec
2015-10-29 16:55 ` [LTP] [PATCH 3/3] diotest5.c: replaced iovec Cedric Hnyda
@ 2015-10-30 8:53 ` Jan Stancek
2015-10-30 9:17 ` Cedric Hnyda
0 siblings, 1 reply; 6+ messages in thread
From: Jan Stancek @ 2015-10-30 8:53 UTC (permalink / raw)
To: ltp
----- Original Message -----
> From: "Cedric Hnyda" <chnyda@suse.com>
> To: ltp@lists.linux.it
> Sent: Thursday, 29 October, 2015 5:55:58 PM
> Subject: [LTP] [PATCH 3/3] diotest5.c: replaced iovec
>
> Replaced iovec pointers by normal buffers.
> iovec were passed instead of expected buffers.
What is the problem with iovecs here?
Isn't readv/writev meant to be used in this test?
* DESCRIPTION
* The programs test buffered and direct IO with vector arrays using
* readv() and writev() calls.
Regards,
Jan
>
> Signed-off-by: Cedric Hnyda <chnyda@suse.com>
> ---
> testcases/kernel/io/direct_io/diotest5.c | 54
> +++++++++-----------------------
> 1 file changed, 14 insertions(+), 40 deletions(-)
>
> diff --git a/testcases/kernel/io/direct_io/diotest5.c
> b/testcases/kernel/io/direct_io/diotest5.c
> index 0c10742..e5946bd 100644
> --- a/testcases/kernel/io/direct_io/diotest5.c
> +++ b/testcases/kernel/io/direct_io/diotest5.c
> @@ -84,49 +84,30 @@ static void prg_usage(void);
> static int runtest(int fd_r, int fd_w, int iter, off64_t offset)
> {
> int i, bufsize = BUFSIZE;
> - struct iovec *iov1, *iov2, *iovp;
>
> /* Allocate for buffers and data pointers */
> - iov1 = (struct iovec *) valloc(sizeof(struct iovec) * nvector);
> - if (iov1 == NULL) {
> - tst_resm(TFAIL, "valloc() buf1 failed: %s", strerror(errno));
> - return (-1);
> - }
> + char *buf1, *buf2;
>
> - iov2 = (struct iovec *) valloc(sizeof(struct iovec) * nvector);
> - if (iov2 == NULL) {
> - tst_resm(TFAIL, "valloc buf2 failed: %s", strerror(errno));
> - return (-1);
> - }
> - for (i = 0, iovp = iov1; i < nvector; iovp++, i++) {
> - iovp->iov_base = valloc(bufsize);
> - if (iovp->iov_base == NULL) {
> - tst_resm(TFAIL, "valloc for iovp->iov_base: %s",
> - strerror(errno));
> - return (-1);
> - }
> - iovp->iov_len = bufsize;
> - }
> - for (i = 0, iovp = iov2; i < nvector; iovp++, i++) {
> - iovp->iov_base = valloc(bufsize);
> - if (iovp->iov_base == NULL) {
> - tst_resm(TFAIL, "valloc, iov2 for iovp->iov_base: %s",
> - strerror(errno));
> - return (-1);
> - }
> - iovp->iov_len = bufsize;
> + buf1 = valloc(bufsize);
> + buf2 = valloc(bufsize);
> +
> + if (!buf1 || !buf2) {
> + tst_resm(TBROK | TERRNO, "valloc() failed");
> + free(buf1);
> + free(buf2);
> + return -1;
> }
>
> /* Test */
> for (i = 0; i < iter; i++) {
> - vfillbuf(iov1, nvector, i);
> - vfillbuf(iov2, nvector, i + 1);
> + fillbuf(buf1, bufsize, i);
> + fillbuf(buf2, bufsize, i + 1);
> if (lseek(fd_w, offset, SEEK_SET) < 0) {
> tst_resm(TFAIL, "lseek before writev failed: %s",
> strerror(errno));
> return (-1);
> }
> - if (writev(fd_w, iov1, nvector) < 0) {
> + if (write(fd_w, buf1, bufsize) < 0) {
> tst_resm(TFAIL, "writev failed: %s", strerror(errno));
> return (-1);
> }
> @@ -135,23 +116,16 @@ static int runtest(int fd_r, int fd_w, int iter,
> off64_t offset)
> strerror(errno));
> return (-1);
> }
> - if (readv(fd_r, iov2, nvector) < 0) {
> + if (read(fd_r, buf2, bufsize) < 0) {
> tst_resm(TFAIL, "readv failed: %s", strerror(errno));
> return (-1);
> }
> - if (vbufcmp(iov1, iov2, nvector) != 0) {
> + if (bufcmp(buf1, buf2, bufsize) != 0) {
> tst_resm(TFAIL, "readv/writev comparision failed");
> return (-1);
> }
> }
>
> - /* Cleanup */
> - for (i = 0, iovp = iov1; i < nvector; iovp++, i++)
> - free(iovp->iov_base);
> - for (i = 0, iovp = iov2; i < nvector; iovp++, i++)
> - free(iovp->iov_base);
> - free(iov1);
> - free(iov2);
> return 0;
> }
>
> --
> 2.1.4
>
>
> --
> Mailing list info: http://lists.linux.it/listinfo/ltp
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [LTP] [PATCH 3/3] diotest5.c: replaced iovec
2015-10-30 8:53 ` Jan Stancek
@ 2015-10-30 9:17 ` Cedric Hnyda
0 siblings, 0 replies; 6+ messages in thread
From: Cedric Hnyda @ 2015-10-30 9:17 UTC (permalink / raw)
To: ltp
On 10/30/2015 09:53 AM, Jan Stancek wrote:
> What is the problem with iovecs here?
> Isn't readv/writev meant to be used in this test?
>
> * DESCRIPTION
> * The programs test buffered and direct IO with vector arrays using
> * readv() and writev() calls.
My bad. You are right it is indeed irrelevant.
I misread something.
Best,
Cedric
--
Cedric Hnyda
^ permalink raw reply [flat|nested] 6+ messages in thread
* [LTP] [PATCH 1/3] diotest: cleanup & fix
2015-10-29 16:55 [LTP] [PATCH 1/3] diotest: cleanup & fix Cedric Hnyda
2015-10-29 16:55 ` [LTP] [PATCH 2/3] diotest4.c: Fixed filesystem Cedric Hnyda
2015-10-29 16:55 ` [LTP] [PATCH 3/3] diotest5.c: replaced iovec Cedric Hnyda
@ 2015-11-04 12:41 ` Cyril Hrubis
2 siblings, 0 replies; 6+ messages in thread
From: Cyril Hrubis @ 2015-11-04 12:41 UTC (permalink / raw)
To: ltp
Hi!
> +static void fail_clean(int fd1, int fd2, char *infile, char *outfile)
> {
> close(fd1);
> close(fd2);
> @@ -98,7 +93,8 @@ int main(int argc, char *argv[])
> while ((i = getopt(argc, argv, "b:n:i:o:")) != -1) {
> switch (i) {
> case 'b':
> - if ((bufsize = atoi(optarg)) <= 0) {
> + bufsize = atoi(optarg);
> + if (bufsize <= 0) {
> fprintf(stderr, "bufsize must be > 0\n");
> prg_usage();
> }
> @@ -109,7 +105,8 @@ int main(int argc, char *argv[])
> }
> break;
> case 'n':
> - if ((numblks = atoi(optarg)) <= 0) {
> + numblks = atoi(optarg);
> + if (numblks <= 0) {
> fprintf(stderr, "numblks must be > 0\n");
> prg_usage();
> }
> @@ -126,21 +123,25 @@ int main(int argc, char *argv[])
> }
>
> /* Test for filesystem support of O_DIRECT */
> - if ((fd = open(infile, O_DIRECT | O_RDWR | O_CREAT, 0666)) < 0) {
> - tst_brkm(TCONF,
> - NULL,
> - "O_DIRECT is not supported by this filesystem.");
> - } else {
> - close(fd);
> - }
> + fd = open(infile, O_DIRECT | O_RDWR | O_CREAT, 0666);
> + if (fd < 0 && errno == EINVAL)
> + tst_brkm(TCONF, NULL,
> + "O_DIRECT is not supported by this filesystem. %s",
> + strerror(errno));
> + else if (fd < 0)
Well LKML coding style preffers to have curly braces if the statement
spans across multiple lines, even if it's one function call. Not that
this is a big problem, we have quite a lot of code that does not reflect
that.
> + tst_brkm(TBROK, NULL, "Couldn't open test file %s: %s",
> + infile, strerror(errno));
> + close(fd);
>
> /* Open files */
> - if ((fd1 = open(infile, O_DIRECT | O_RDWR | O_CREAT, 0666)) < 0) {
> + fd1 = open(infile, O_DIRECT | O_RDWR | O_CREAT, 0666);
> + if (fd1 < 0) {
> tst_brkm(TFAIL, NULL, "open infile failed: %s",
> strerror(errno));
> }
Can you pretty please change all the open statements into to
SAFE_OPEN()?
You would have to convert the fail_clean() into cleanup() without any
parameters (make fd1, fd2 global...) in this case but that shouldn't be
that hard...
Otherwise the changes looks good.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-11-04 12:41 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-29 16:55 [LTP] [PATCH 1/3] diotest: cleanup & fix Cedric Hnyda
2015-10-29 16:55 ` [LTP] [PATCH 2/3] diotest4.c: Fixed filesystem Cedric Hnyda
2015-10-29 16:55 ` [LTP] [PATCH 3/3] diotest5.c: replaced iovec Cedric Hnyda
2015-10-30 8:53 ` Jan Stancek
2015-10-30 9:17 ` Cedric Hnyda
2015-11-04 12:41 ` [LTP] [PATCH 1/3] diotest: cleanup & fix Cyril Hrubis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox