aio_tio: fix error diagnosis for byte transfers
PATCH 1/2 aio_tio: fix error diagnosis for byte transfers
In case the expected bytes written during an async io operation did not match the actually written ones, the wrong error code (res2) had been reported. Correct that to reflect the error condition (res!=bytes).
--- testcases/kernel/io/aio/aio02/aio_tio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
testcases/kernel/io/aio/aio02/aio_tio.c +1 -1
@@ -57,7 +57,7 @@ static void work_done(io_context_t ctx, struct iocb *iocb, long res, long res2)if (res != iocb->u.c.nbytes) {fprintf (stderr,"write missed bytes expect %lu got %ld\n" , - iocb->u.c.nbytes, res2); + iocb->u.c.nbytes, res);exit (1 ); } wait_count--;
Signature · 1 line
2.20.1.97.g81188d93c3-goog
PATCH 2/2 aio_tio: determine alignment based on target filesystem
The alignment for O_DIRECT operations has to match the blocksize of the underlying filesystem. Determine the alignment from the target file's file system.
aio_tio test cases 1 and 2 failed (nondeterministic) on aarch64 when run on a 4096 byte blocksize filesystem and with an alignment of 512 bytes.
Determining the blocksize from the file system and using it for the alignment resolves the test issue.
--- testcases/kernel/io/aio/aio02/aio_tio.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
testcases/kernel/io/aio/aio02/aio_tio.c +7 -1
@@ -34,6 +34,7 @@#include "config.h" #include "common.h" #include "test.h" +#include "tst_safe_macros.h" #include <string.h> #include <errno.h>
@@ -42,7 +43,6 @@#define AIO_MAXIO 32#define AIO_BLKSIZE (64*1024) -static int alignment =512 ;static int wait_count =0 ;/*
@@ -94,6 +94,8 @@ int io_tio(char *pathname, int flag, int n, int operation)void *bufptr =NULL ;off_t offset =0 ;struct timespec timeout; +struct stat fi_stat; +size_t alignment;io_context_t myctx;struct iocb iocb_array[AIO_MAXIO ];
@@ -105,6 +107,10 @@ int io_tio(char *pathname, int flag, int n, int operation)return -1 ; } +/* determine the alignment from the blksize of the underlying fs */ +SAFE_FSTAT (fd, &fi_stat); + alignment = fi_stat.st_blksize; + res =io_queue_init (n, &myctx);//printf (" res = %d \n", res);
Signature · 1 line
2.20.1.97.g81188d93c3-goog
PATCH 2/2 aio_tio: determine alignment based on target filesystem
Quoted 22 lines · Matthias Maennich
The alignment for
O_DIRECToperations has to match the blocksize of the underlying filesystem. Determine the alignment from the target file's file system.
aio_tiotest cases 1 and 2 failed (nondeterministic) on aarch64 when run on a 4096 byte blocksize filesystem and with an alignment of 512 bytes.Determining the blocksize from the file system and using it for the alignment resolves the test issue.
Signed-off-by Matthias Maennich <[email protected]>Reviewed-by Alessio Balsini <[email protected]>--- testcases/kernel/io/aio/aio02/aio_tio.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)testcases/kernel/io/aio/aio02/aio_tio.c +0
-0
testcases/kernel/io/aio/aio02/aio_tio.c line 37
Quoted 4 lines
testcases/kernel/io/aio/aio02/aio_tio.c +1
-0@@ -34,6 +34,7 @@#include "config.h" #include "common.h" #include "test.h" +#include "tst_safe_macros.h"
Since aio_tio.c is still written in old API, so here we probably need to include original safe_macros.h but not the tst_safe_macros.h which is for new LTP API.
testcases/kernel/io/aio/aio02/aio_tio.c int io_tio(char *pathname, int flag, int n, int operation) · line 111
Quoted 3 lines
testcases/kernel/io/aio/aio02/aio_tio.c +2
-0+/* determine the alignment from the blksize of the underlying fs */ +SAFE_FSTAT (fd, &fi_stat);
Then, here needs old using way too: SAFE_FSTAT(NULL, fd, &fi_stat);
Beside these tiny issues, patch set LGTM.
--
Regards,
Li Wang