public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [LTP] [PATCH v2 1/3] ltp-aiodio: report posix_memalign errors properly
@ 2016-07-07 15:05 Eryu Guan
  2016-07-07 15:05 ` [LTP] [PATCH v2 2/3] ltp-aiodio/dio_sparse: add offset support Eryu Guan
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Eryu Guan @ 2016-07-07 15:05 UTC (permalink / raw)
  To: ltp

From posix_memalign(3) the value of errno is indeterminate after a call
to posix_memalign(). So TERRNO doesn't work in this case.
dio_sparse    1  TBROK  :  dio_sparse.c:75: posix_memalign(): errno=SUCCESS(0): Success

Report posix_memalign() errors by calling strerror on the return value.
dio_sparse    1  TBROK  :  dio_sparse.c:74: posix_memalign(): EINVAL

Signed-off-by: Eryu Guan <eguan@redhat.com>
---
v2:
- include "test.h" when needed to avoid compile error

 testcases/kernel/io/ltp-aiodio/aiodio_append.c |  9 +++++++--
 testcases/kernel/io/ltp-aiodio/aiodio_sparse.c |  7 ++++---
 testcases/kernel/io/ltp-aiodio/dio_append.c    | 10 ++++++++--
 testcases/kernel/io/ltp-aiodio/dio_sparse.c    |  7 ++++---
 testcases/kernel/io/ltp-aiodio/dio_truncate.c  | 17 +++++++++++++----
 5 files changed, 36 insertions(+), 14 deletions(-)

diff --git a/testcases/kernel/io/ltp-aiodio/aiodio_append.c b/testcases/kernel/io/ltp-aiodio/aiodio_append.c
index 56e9c09..77df02c 100644
--- a/testcases/kernel/io/ltp-aiodio/aiodio_append.c
+++ b/testcases/kernel/io/ltp-aiodio/aiodio_append.c
@@ -33,6 +33,8 @@
 
 #include <libaio.h>
 
+#include "test.h"
+
 #define NUM_CHILDREN 8
 
 char *check_zero(unsigned char *buf, int size)
@@ -98,6 +100,7 @@ void aiodio_append(char *filename)
 	void *bufptr;
 	int i;
 	int w;
+	int ret;
 	struct iocb iocb_array[NUM_AIO];
 	struct iocb *iocbs[NUM_AIO];
 	off_t offset = 0;
@@ -115,8 +118,10 @@ void aiodio_append(char *filename)
 	io_queue_init(NUM_AIO, &myctx);
 
 	for (i = 0; i < NUM_AIO; i++) {
-		if (posix_memalign(&bufptr, 4096, AIO_SIZE)) {
-			perror("cannot malloc aligned memory");
+		ret = posix_memalign(&bufptr, 4096, AIO_SIZE);
+		if (ret) {
+			tst_resm(TBROK, "cannot malloc aligned memory: %s",
+					tst_strerrno(ret));
 			return;
 		}
 		memset(bufptr, 0, AIO_SIZE);
diff --git a/testcases/kernel/io/ltp-aiodio/aiodio_sparse.c b/testcases/kernel/io/ltp-aiodio/aiodio_sparse.c
index 944e12b..edd3cc2 100644
--- a/testcases/kernel/io/ltp-aiodio/aiodio_sparse.c
+++ b/testcases/kernel/io/ltp-aiodio/aiodio_sparse.c
@@ -60,7 +60,7 @@ int aiodio_sparse(char *filename, int align, int writesize, int filesize,
 		  int num_aio)
 {
 	int fd;
-	int i, w;
+	int i, w, ret;
 	struct iocb **iocbs;
 	off_t offset;
 	io_context_t myctx;
@@ -97,8 +97,9 @@ int aiodio_sparse(char *filename, int align, int writesize, int filesize,
 	for (i = 0; i < num_aio; i++) {
 		void *bufptr;
 
-		if (posix_memalign(&bufptr, align, writesize)) {
-			tst_resm(TBROK | TERRNO, "posix_memalign()");
+		ret = posix_memalign(&bufptr, align, writesize);
+		if (ret) {
+			tst_resm(TBROK, "posix_memalign(): %s", tst_strerrno(ret));
 			close(fd);
 			unlink(filename);
 			return 1;
diff --git a/testcases/kernel/io/ltp-aiodio/dio_append.c b/testcases/kernel/io/ltp-aiodio/dio_append.c
index 878c465..f2e4db4 100644
--- a/testcases/kernel/io/ltp-aiodio/dio_append.c
+++ b/testcases/kernel/io/ltp-aiodio/dio_append.c
@@ -40,6 +40,8 @@
 #include <unistd.h>
 #include <memory.h>
 #include <limits.h>
+
+#include "test.h"
 #define NUM_CHILDREN 8
 
 char *check_zero(unsigned char *buf, int size)
@@ -99,6 +101,7 @@ void dio_append(char *filename)
 	void *bufptr;
 	int i;
 	int w;
+	int ret;
 
 	fd = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666);
 
@@ -107,8 +110,11 @@ void dio_append(char *filename)
 		return;
 	}
 
-	if (posix_memalign(&bufptr, 4096, 64 * 1024)) {
-		perror("cannot malloc aligned memory");
+	ret = posix_memalign(&bufptr, 4096, 64 * 1024);
+	if (ret) {
+		tst_resm(TBROK, "cannot malloc aligned memory: %s",
+				tst_strerrno(ret));
+		close(fd);
 		return;
 	}
 
diff --git a/testcases/kernel/io/ltp-aiodio/dio_sparse.c b/testcases/kernel/io/ltp-aiodio/dio_sparse.c
index 7ad5f80..12e478e 100644
--- a/testcases/kernel/io/ltp-aiodio/dio_sparse.c
+++ b/testcases/kernel/io/ltp-aiodio/dio_sparse.c
@@ -55,7 +55,7 @@ int TST_TOTAL = 1;
  */
 int dio_sparse(char *filename, int align, int writesize, int filesize)
 {
-	int fd;
+	int fd, ret;
 	void *bufptr;
 	int i, w;
 
@@ -68,9 +68,10 @@ int dio_sparse(char *filename, int align, int writesize, int filesize)
 
 	SAFE_FTRUNCATE(cleanup, fd, filesize);
 
-	if (posix_memalign(&bufptr, align, writesize)) {
+	ret = posix_memalign(&bufptr, align, writesize);
+	if (ret) {
+		tst_resm(TBROK, "posix_memalign(): %s", tst_strerrno(ret));
 		close(fd);
-		tst_resm(TBROK | TERRNO, "posix_memalign()");
 		return 1;
 	}
 
diff --git a/testcases/kernel/io/ltp-aiodio/dio_truncate.c b/testcases/kernel/io/ltp-aiodio/dio_truncate.c
index 7458a19..7d49766 100644
--- a/testcases/kernel/io/ltp-aiodio/dio_truncate.c
+++ b/testcases/kernel/io/ltp-aiodio/dio_truncate.c
@@ -37,6 +37,8 @@
 #include <string.h>
 #include <limits.h>
 
+#include "test.h"
+
 #define NUM_CHILDREN 8
 
 char *check_zero(unsigned char *buf, int size)
@@ -66,10 +68,13 @@ int dio_read(char *filename)
 {
 	int fd;
 	int r;
+	int ret;
 	void *bufptr;
 
-	if (posix_memalign(&bufptr, 4096, 64 * 1024)) {
-		perror("cannot malloc aligned memory");
+	ret = posix_memalign(&bufptr, 4096, 64 * 1024);
+	if (ret) {
+		tst_resm(TBROK, "cannot malloc aligned memory: %s",
+				tst_strerrno(ret));
 		return -1;
 	}
 
@@ -104,6 +109,7 @@ void dio_append(char *filename, int fill)
 	void *bufptr;
 	int i;
 	int w;
+	int ret;
 
 	fd = open(filename, O_DIRECT | O_WRONLY | O_CREAT, 0666);
 
@@ -112,8 +118,11 @@ void dio_append(char *filename, int fill)
 		return;
 	}
 
-	if (posix_memalign(&bufptr, 4096, 64 * 1024)) {
-		perror("cannot malloc aligned memory");
+	ret = posix_memalign(&bufptr, 4096, 64 * 1024);
+	if (ret) {
+		tst_resm(TBROK, "cannot malloc aligned memory: %s",
+				tst_strerrno(ret));
+		close(fd);
 		return;
 	}
 
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [LTP] [PATCH v2 2/3] ltp-aiodio/dio_sparse: add offset support
  2016-07-07 15:05 [LTP] [PATCH v2 1/3] ltp-aiodio: report posix_memalign errors properly Eryu Guan
@ 2016-07-07 15:05 ` Eryu Guan
  2016-07-07 15:05 ` [LTP] [PATCH v2 3/3] ltp-aiodio: new dio_sparse tests specifying offset Eryu Guan
  2016-07-11 12:35 ` [LTP] [PATCH v2 1/3] ltp-aiodio: report posix_memalign errors properly Jan Stancek
  2 siblings, 0 replies; 4+ messages in thread
From: Eryu Guan @ 2016-07-07 15:05 UTC (permalink / raw)
  To: ltp

Introduce a new option "-o" to specify the write offset.

Signed-off-by: Eryu Guan <eguan@redhat.com>
---
v2:
- add a missing declare of "i", which causes compile error

 testcases/kernel/io/ltp-aiodio/dio_sparse.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/testcases/kernel/io/ltp-aiodio/dio_sparse.c b/testcases/kernel/io/ltp-aiodio/dio_sparse.c
index 12e478e..321bbbd 100644
--- a/testcases/kernel/io/ltp-aiodio/dio_sparse.c
+++ b/testcases/kernel/io/ltp-aiodio/dio_sparse.c
@@ -53,7 +53,7 @@ int TST_TOTAL = 1;
 /*
  * Write zeroes using O_DIRECT into sparse file.
  */
-int dio_sparse(char *filename, int align, int writesize, int filesize)
+int dio_sparse(char *filename, int align, int writesize, int filesize, int offset)
 {
 	int fd, ret;
 	void *bufptr;
@@ -76,7 +76,8 @@ int dio_sparse(char *filename, int align, int writesize, int filesize)
 	}
 
 	memset(bufptr, 0, writesize);
-	for (i = 0; i < filesize;) {
+	lseek(fd, offset, SEEK_SET);
+	for (i = offset; i < filesize;) {
 		if ((w = write(fd, bufptr, writesize)) != writesize) {
 			tst_resm(TBROK | TERRNO, "write() returned %d", w);
 			close(fd);
@@ -95,7 +96,7 @@ int dio_sparse(char *filename, int align, int writesize, int filesize)
 void usage(void)
 {
 	fprintf(stderr, "usage: dio_sparse [-d] [-n children] [-s filesize]"
-		" [-w writesize]\n");
+		" [-w writesize] [-o offset]]\n");
 	exit(1);
 }
 
@@ -108,11 +109,12 @@ int main(int argc, char **argv)
 	long alignment = 512;
 	int writesize = 65536;
 	int filesize = 100 * 1024 * 1024;
+	int offset = 0;
 	int c;
 	int children_errors = 0;
 	int ret;
 
-	while ((c = getopt(argc, argv, "dw:n:a:s:")) != -1) {
+	while ((c = getopt(argc, argv, "dw:n:a:s:o:")) != -1) {
 		char *endp;
 		switch (c) {
 		case 'd':
@@ -130,6 +132,10 @@ int main(int argc, char **argv)
 			filesize = strtol(optarg, &endp, 0);
 			filesize = scale_by_kmg(filesize, *endp);
 			break;
+		case 'o':
+			offset = strtol(optarg, &endp, 0);
+			offset = scale_by_kmg(offset, *endp);
+			break;
 		case 'n':
 			num_children = atoi(optarg);
 			if (num_children > NUM_CHILDREN) {
@@ -167,7 +173,7 @@ int main(int argc, char **argv)
 	}
 	tst_sig(FORK, DEF_HANDLER, cleanup);
 
-	ret = dio_sparse(filename, alignment, writesize, filesize);
+	ret = dio_sparse(filename, alignment, writesize, filesize, offset);
 
 	tst_resm(TINFO, "Killing childrens(s)");
 
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [LTP] [PATCH v2 3/3] ltp-aiodio: new dio_sparse tests specifying offset
  2016-07-07 15:05 [LTP] [PATCH v2 1/3] ltp-aiodio: report posix_memalign errors properly Eryu Guan
  2016-07-07 15:05 ` [LTP] [PATCH v2 2/3] ltp-aiodio/dio_sparse: add offset support Eryu Guan
@ 2016-07-07 15:05 ` Eryu Guan
  2016-07-11 12:35 ` [LTP] [PATCH v2 1/3] ltp-aiodio: report posix_memalign errors properly Jan Stancek
  2 siblings, 0 replies; 4+ messages in thread
From: Eryu Guan @ 2016-07-07 15:05 UTC (permalink / raw)
  To: ltp

The first 4 tests are to cover the second issue described in this patch

direct-io: fix direct write stale data exposure from concurrent buffered read
https://patchwork.ozlabs.org/patch/622065/

Other tests are added to test various offsets.

Signed-off-by: Eryu Guan <eguan@redhat.com>
---
v2:
- no change in v2

 runtest/ltp-aiodio.part2 | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/runtest/ltp-aiodio.part2 b/runtest/ltp-aiodio.part2
index 28a84ac..00b9abf 100644
--- a/runtest/ltp-aiodio.part2
+++ b/runtest/ltp-aiodio.part2
@@ -78,3 +78,11 @@ ADSP076 dio_sparse  -a 8k -w 8192k -s 8192k -n 64
 ADSP077 dio_sparse  -a 8k -w 518192k -s 18192k -n 128
 ADSP078 dio_sparse  -a 8k -w 518192k -s 518192k -n 512
 ADSP079 dio_sparse  -a 8k -w 518192k -s 518192k -n 1000
+ADSP080 dio_sparse  -a 4k -w 4k -s 2k -o 2k -n 2
+ADSP081 dio_sparse  -a 2k -w 2k -s 1k -o 1k -n 2
+ADSP082 dio_sparse  -a 1k -w 1k -s 512 -o 512 -n 2
+ADSP083 dio_sparse  -a 4k -w 4k -s 2k -o 3k -n 2
+ADSP084 dio_sparse  -a 4k -w 4k -s 4k -o 4k -n 2
+ADSP085 dio_sparse  -a 4k -w 4k -s 4k -o 6k -n 2
+ADSP086 dio_sparse  -a 4k -w 4k -s 4k -o 8k -n 2
+ADSP087 dio_sparse  -a 4k -w 16k -s 8k -o 8k -n 2
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [LTP] [PATCH v2 1/3] ltp-aiodio: report posix_memalign errors properly
  2016-07-07 15:05 [LTP] [PATCH v2 1/3] ltp-aiodio: report posix_memalign errors properly Eryu Guan
  2016-07-07 15:05 ` [LTP] [PATCH v2 2/3] ltp-aiodio/dio_sparse: add offset support Eryu Guan
  2016-07-07 15:05 ` [LTP] [PATCH v2 3/3] ltp-aiodio: new dio_sparse tests specifying offset Eryu Guan
@ 2016-07-11 12:35 ` Jan Stancek
  2 siblings, 0 replies; 4+ messages in thread
From: Jan Stancek @ 2016-07-11 12:35 UTC (permalink / raw)
  To: ltp





----- Original Message -----
> From: "Eryu Guan" <eguan@redhat.com>
> To: ltp@lists.linux.it
> Sent: Thursday, 7 July, 2016 5:05:15 PM
> Subject: [LTP] [PATCH v2 1/3] ltp-aiodio: report posix_memalign errors	properly
> 
> From posix_memalign(3) the value of errno is indeterminate after a call
> to posix_memalign(). So TERRNO doesn't work in this case.
> dio_sparse    1  TBROK  :  dio_sparse.c:75: posix_memalign():
> errno=SUCCESS(0): Success
> 
> Report posix_memalign() errors by calling strerror on the return value.
> dio_sparse    1  TBROK  :  dio_sparse.c:74: posix_memalign(): EINVAL
> 
> Signed-off-by: Eryu Guan <eguan@redhat.com>
> ---
> v2:
> - include "test.h" when needed to avoid compile error
> 
>  testcases/kernel/io/ltp-aiodio/aiodio_append.c |  9 +++++++--
>  testcases/kernel/io/ltp-aiodio/aiodio_sparse.c |  7 ++++---
>  testcases/kernel/io/ltp-aiodio/dio_append.c    | 10 ++++++++--
>  testcases/kernel/io/ltp-aiodio/dio_sparse.c    |  7 ++++---
>  testcases/kernel/io/ltp-aiodio/dio_truncate.c  | 17 +++++++++++++----
>  5 files changed, 36 insertions(+), 14 deletions(-)
> 
> diff --git a/testcases/kernel/io/ltp-aiodio/aiodio_append.c
> b/testcases/kernel/io/ltp-aiodio/aiodio_append.c
> index 56e9c09..77df02c 100644
> --- a/testcases/kernel/io/ltp-aiodio/aiodio_append.c
> +++ b/testcases/kernel/io/ltp-aiodio/aiodio_append.c
> @@ -33,6 +33,8 @@
>  
>  #include <libaio.h>
>  
> +#include "test.h"
> +
>  #define NUM_CHILDREN 8
>  
>  char *check_zero(unsigned char *buf, int size)
> @@ -98,6 +100,7 @@ void aiodio_append(char *filename)
>  	void *bufptr;
>  	int i;
>  	int w;
> +	int ret;
>  	struct iocb iocb_array[NUM_AIO];
>  	struct iocb *iocbs[NUM_AIO];
>  	off_t offset = 0;
> @@ -115,8 +118,10 @@ void aiodio_append(char *filename)
>  	io_queue_init(NUM_AIO, &myctx);
>  
>  	for (i = 0; i < NUM_AIO; i++) {
> -		if (posix_memalign(&bufptr, 4096, AIO_SIZE)) {
> -			perror("cannot malloc aligned memory");
> +		ret = posix_memalign(&bufptr, 4096, AIO_SIZE);
> +		if (ret) {
> +			tst_resm(TBROK, "cannot malloc aligned memory: %s",
> +					tst_strerrno(ret));

Just fyi, if you want to safe few characters: we have TRERRNO, that works
as TERRNO, but instead of using value of TEST_ERRNO, it uses TEST_RETURN.
So code above would become:

TEST(posix_memalign(&bufptr, 4096, AIO_SIZE));
if (TEST_RETURN)
    tst_resm(TBROK|TRERRNO, "cannot malloc aligned memory");

Regards,
Jan

>  			return;
>  		}
>  		memset(bufptr, 0, AIO_SIZE);

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-07-11 12:35 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-07 15:05 [LTP] [PATCH v2 1/3] ltp-aiodio: report posix_memalign errors properly Eryu Guan
2016-07-07 15:05 ` [LTP] [PATCH v2 2/3] ltp-aiodio/dio_sparse: add offset support Eryu Guan
2016-07-07 15:05 ` [LTP] [PATCH v2 3/3] ltp-aiodio: new dio_sparse tests specifying offset Eryu Guan
2016-07-11 12:35 ` [LTP] [PATCH v2 1/3] ltp-aiodio: report posix_memalign errors properly Jan Stancek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox