[LTP] 答复: [PATCH] ltp-aiodio/dio_append: fix dio_append()
James Dong (董世江)
dongshijiang@inspur.com
Thu Jun 3 12:27:49 CEST 2021
Hi xuyang
1. if not create directory, in the function dio_append The open file returns a failure, Because the directory "aiodio" does not exist.
2. The mkdir command is called to recursively create directories
-----邮件原件-----
发件人: xuyang2018.jy@fujitsu.com [mailto:xuyang2018.jy@fujitsu.com]
发送时间: 2021年6月3日 18:05
收件人: James Dong (董世江) <dongshijiang@inspur.com>
抄送: ltp@lists.linux.it
主题: Re: [LTP] [PATCH] ltp-aiodio/dio_append: fix dio_append()
Hi dong
> When running the dio_append test in the ltp-aiodiio.part4 test item, there was a problem that the file could not be created, but the test result was PASS. To this end, the following operations have been added.
> 1. create the directory where the file is located.
Why need to create directory?
> 2. rewrite the dio_append API. Add relevant return values.
>
> Signed-off-by: dongshijiang<dongshijiang@inspur.com>
> ---
> testcases/kernel/io/ltp-aiodio/dio_append.c | 26 +++++++++++++++------
> 1 file changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/testcases/kernel/io/ltp-aiodio/dio_append.c b/testcases/kernel/io/ltp-aiodio/dio_append.c
> index 3f0ed29d5..500dfdc31 100644
> --- a/testcases/kernel/io/ltp-aiodio/dio_append.c
> +++ b/testcases/kernel/io/ltp-aiodio/dio_append.c
> @@ -75,7 +75,7 @@ int read_eof(char *filename)
> return 0;
> }
>
> -void dio_append(char *filename)
> +int dio_append(char *filename)
> {
> int fd;
> void *bufptr;
> @@ -86,14 +86,14 @@ void dio_append(char *filename)
>
> if (fd< 0) {
> perror("cannot create file");
> - return;
> + return 1;
> }
>
> TEST(posix_memalign(&bufptr, 4096, 64 * 1024));
> if (TEST_RETURN) {
> tst_resm(TBROK | TRERRNO, "cannot malloc aligned memory");
> close(fd);
> - return;
> + return 1;
> }
>
> memset(bufptr, 0, 64 * 1024);
> @@ -102,17 +102,29 @@ void dio_append(char *filename)
> fprintf(stderr, "write %d returned %d\n", i, w);
> }
> }
> + return 0;
> }
>
> int main(void)
> {
> - char filename[PATH_MAX];
> + char filename[PATH_MAX], filepath[PATH_MAX-5];
> int pid[NUM_CHILDREN];
> int num_children = 1;
> int i;
> + int ret = -1;
>
> - snprintf(filename, sizeof(filename), "%s/aiodio/file",
> + snprintf(filepath, sizeof(filepath), "%s/aiodio",
> getenv("TMP") ? getenv("TMP") : "/tmp");
> +
> + if (access(filepath, F_OK) == -1) {
> + char command[PATH_MAX + 10];
> +
> + snprintf(command, sizeof(command), "mkdir -p %s", filepath);
> + if (system(command) != 0)
> + return 1;
just only call mkdir syscall instead of command.
> + }
> +
> + snprintf(filename, sizeof(filename), "%s/file", filepath);
>
> printf("Begin dio_append test...\n");
>
> @@ -134,10 +146,10 @@ int main(void)
> * Parent appends to end of file using direct i/o
> */
>
> - dio_append(filename);
> + ret = dio_append(filename);
>
> for (i = 0; i< num_children; i++) {
> kill(pid[i], SIGTERM);
> }
> - return 0;
> + return ret;
> }
More information about the ltp
mailing list