* [LTP] [PATCH 0/2 v2] syscalls/sendfile: Convert sendfile{08, 09} to the new API
@ 2021-05-20 9:24 Xie Ziyao
2021-05-20 9:24 ` [LTP] [PATCH 1/2 v2] syscalls/sendfile: Convert sendfile08 " Xie Ziyao
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Xie Ziyao @ 2021-05-20 9:24 UTC (permalink / raw)
To: ltp
v1->v2:
1. Add kernel commit to the tst_test structure as a tags;
2. Move [Restrictions] to [Description] for sendfile09;
3. Fix the bug in the previous version for sendfile09 on 32-bit:
+ #include "lapi/abisize.h"
+
+ #ifndef TST_ABI32
...
+ #else
+ TST_TEST_TCONF("This test is only for 64bit");
+ #endif
Xie Ziyao (2):
syscalls/sendfile: Convert sendfile08 to the new API
syscalls/sendfile: Convert sendfile09 to the new API
.../kernel/syscalls/sendfile/sendfile08.c | 142 ++++-------
.../kernel/syscalls/sendfile/sendfile09.c | 236 ++++++------------
2 files changed, 126 insertions(+), 252 deletions(-)
--
2.17.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [LTP] [PATCH 1/2 v2] syscalls/sendfile: Convert sendfile08 to the new API
2021-05-20 9:24 [LTP] [PATCH 0/2 v2] syscalls/sendfile: Convert sendfile{08, 09} to the new API Xie Ziyao
@ 2021-05-20 9:24 ` Xie Ziyao
2021-05-20 9:24 ` [LTP] [PATCH 2/2 v2] syscalls/sendfile: Convert sendfile09 " Xie Ziyao
2021-05-25 15:25 ` [LTP] [PATCH 0/2 v2] syscalls/sendfile: Convert sendfile{08, 09} " Petr Vorel
2 siblings, 0 replies; 6+ messages in thread
From: Xie Ziyao @ 2021-05-20 9:24 UTC (permalink / raw)
To: ltp
Convert sendfile08 to the new API.
Signed-off-by: Xie Ziyao <xieziyao@huawei.com>
---
v1->v2:
1. Add kernel commit to the tst_test structure as a tags.
.../kernel/syscalls/sendfile/sendfile08.c | 142 ++++++------------
1 file changed, 50 insertions(+), 92 deletions(-)
diff --git a/testcases/kernel/syscalls/sendfile/sendfile08.c b/testcases/kernel/syscalls/sendfile/sendfile08.c
index a29632712..ddb8f1dd2 100644
--- a/testcases/kernel/syscalls/sendfile/sendfile08.c
+++ b/testcases/kernel/syscalls/sendfile/sendfile08.c
@@ -1,123 +1,81 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2012 Red Hat, Inc.
- *
- * 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
*/
-/*
+/*\
+ * [Description]
+ *
* Bug in the splice code has caused the file position on the write side
* of the sendfile system call to be incorrectly set to the read side file
* position. This can result in the data being written to an incorrect offset.
*
- * This is a regression test for kernel commit
- * 2cb4b05e7647891b46b91c07c9a60304803d1688
+ * This is a regression test for kernel commit 2cb4b05e76478.
*/
-#include <sys/sendfile.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
#include <stdio.h>
+#include <fcntl.h>
#include <string.h>
#include <unistd.h>
-#include "test.h"
-#include "safe_macros.h"
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/sendfile.h>
-#define TEST_MSG_IN "world"
-#define TEST_MSG_OUT "hello"
-#define TEST_MSG_ALL (TEST_MSG_OUT TEST_MSG_IN)
+#include "tst_test.h"
-TCID_DEFINE(sendfile08);
-int TST_TOTAL = 1;
+#define IN_FILE "in_file"
+#define OUT_FILE "out_file"
+
+#define TEST_MSG_IN "world"
+#define TEST_MSG_OUT "hello"
+#define TEST_MSG_ALL (TEST_MSG_OUT TEST_MSG_IN)
static int in_fd;
static int out_fd;
-static char *in_file = "sendfile08.in";
-static char *out_file = "sendfile08.out";
-
-static void cleanup(void);
-static void setup(void);
-int main(int argc, char *argv[])
+static void run(void)
{
- int lc;
- int ret;
- char buf[BUFSIZ];
-
- tst_parse_opts(argc, argv, NULL, NULL);
+ TEST(sendfile(out_fd, in_fd, NULL, strlen(TEST_MSG_IN)));
+ if (TST_RET == -1)
+ tst_brk(TBROK | TTERRNO, "sendfile() failed");
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- TEST(sendfile(out_fd, in_fd, NULL, strlen(TEST_MSG_IN)));
-
- if (TEST_RETURN == -1)
- tst_brkm(TBROK | TTERRNO, cleanup, "sendfile() failed");
-
- ret = SAFE_LSEEK(cleanup, out_fd, 0, SEEK_SET);
- ret = read(out_fd, buf, BUFSIZ);
- if (ret == -1)
- tst_brkm(TBROK | TERRNO, cleanup, "read %s failed",
- out_file);
-
- if (!strncmp(buf, TEST_MSG_ALL, strlen(TEST_MSG_ALL)))
- tst_resm(TPASS, "sendfile(2) copies data correctly");
- else
- tst_resm(TFAIL, "sendfile(2) copies data incorrectly."
- " Expect \"%s%s\", got \"%s\"", TEST_MSG_OUT,
- TEST_MSG_IN, buf);
- }
-
- cleanup();
- tst_exit();
+ char buf[BUFSIZ];
+ SAFE_LSEEK(out_fd, 0, SEEK_SET);
+ SAFE_READ(0, out_fd, buf, BUFSIZ);
+
+ if (!strncmp(buf, TEST_MSG_ALL, strlen(TEST_MSG_ALL)))
+ tst_res(TPASS, "sendfile(2) copies data correctly");
+ else
+ tst_res(TFAIL, "sendfile(2) copies data incorrectly. "
+ "Expect \"%s%s\", got \"%s\"",
+ TEST_MSG_OUT, TEST_MSG_IN, buf);
}
static void setup(void)
{
- int ret;
-
- /* Disable test if the version of the kernel is less than 2.6.33 */
- if ((tst_kvercmp(2, 6, 33)) < 0) {
- tst_resm(TCONF, "The out_fd must be socket before kernel");
- tst_brkm(TCONF, NULL, "2.6.33, see kernel commit cc56f7d");
- }
+ in_fd = SAFE_CREAT(IN_FILE, 0700);
+ SAFE_WRITE(1, in_fd, TEST_MSG_IN, strlen(TEST_MSG_IN));
+ SAFE_CLOSE(in_fd);
+ in_fd = SAFE_OPEN(IN_FILE, O_RDONLY);
- TEST_PAUSE;
-
- tst_tmpdir();
-
- in_fd = SAFE_CREAT(cleanup, in_file, 0700);
-
- ret = write(in_fd, TEST_MSG_IN, strlen(TEST_MSG_IN));
- if (ret == -1)
- tst_brkm(TBROK | TERRNO, cleanup, "Write %s failed", in_file);
- close(in_fd);
-
- in_fd = SAFE_OPEN(cleanup, in_file, O_RDONLY);
- out_fd = SAFE_OPEN(cleanup, out_file, O_TRUNC | O_CREAT | O_RDWR, 0777);
-
- ret = write(out_fd, TEST_MSG_OUT, strlen(TEST_MSG_OUT));
- if (ret == -1)
- tst_brkm(TBROK | TERRNO, cleanup, "Write %s failed", out_file);
+ out_fd = SAFE_OPEN(OUT_FILE, O_TRUNC | O_CREAT | O_RDWR, 0777);
+ SAFE_WRITE(1, out_fd, TEST_MSG_OUT, strlen(TEST_MSG_OUT));
}
static void cleanup(void)
{
- close(out_fd);
- close(in_fd);
-
- tst_rmdir();
+ SAFE_CLOSE(in_fd);
+ SAFE_CLOSE(out_fd);
}
+
+static struct tst_test test = {
+ .needs_tmpdir = 1,
+ .setup = setup,
+ .cleanup = cleanup,
+ .test_all = run,
+ .min_kver = "2.6.33",
+ .tags = (const struct tst_tag[]) {
+ {"linux-git", "2cb4b05e76478"},
+ {}
+ }
+};
--
2.17.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [LTP] [PATCH 2/2 v2] syscalls/sendfile: Convert sendfile09 to the new API
2021-05-20 9:24 [LTP] [PATCH 0/2 v2] syscalls/sendfile: Convert sendfile{08, 09} to the new API Xie Ziyao
2021-05-20 9:24 ` [LTP] [PATCH 1/2 v2] syscalls/sendfile: Convert sendfile08 " Xie Ziyao
@ 2021-05-20 9:24 ` Xie Ziyao
2021-05-25 15:25 ` [LTP] [PATCH 0/2 v2] syscalls/sendfile: Convert sendfile{08, 09} " Petr Vorel
2 siblings, 0 replies; 6+ messages in thread
From: Xie Ziyao @ 2021-05-20 9:24 UTC (permalink / raw)
To: ltp
1. Convert sendfile09 to the new API;
2. Bugfix for running with option "-i":
* OFF_T offset = tc[i].offset;
Use offset instead of tc[i].offset when calling sendfile(2).
Signed-off-by: Xie Ziyao <xieziyao@huawei.com>
---
v1->v2:
1. Add kernel commit to the tst_test structure as a tags;
2. Move [Restrictions] to [Description];
3. Fix the bug in the previous version on 32-bit:
+ #include "lapi/abisize.h"
+
+ #ifndef TST_ABI32
...
+ #else
+ TST_TEST_TCONF("This test is only for 64bit");
+ #endif
.../kernel/syscalls/sendfile/sendfile09.c | 236 ++++++------------
1 file changed, 76 insertions(+), 160 deletions(-)
diff --git a/testcases/kernel/syscalls/sendfile/sendfile09.c b/testcases/kernel/syscalls/sendfile/sendfile09.c
index b9d9c8407..667e314bb 100644
--- a/testcases/kernel/syscalls/sendfile/sendfile09.c
+++ b/testcases/kernel/syscalls/sendfile/sendfile09.c
@@ -1,74 +1,42 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
- *
- * Copyright (c) International Business Machines Corp., 2014
- *
- * 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.
+ * Copyright (c) International Business Machines Corp., 2014
*/
-/*
- * NAME
- * sendfile09.c
- *
- * DESCRIPTION
- * Testcase copied from sendfile02.c to test the basic functionality of
- * the sendfile(2) system call on large file. There is a kernel bug which
- * introduced by commit 8f9c0119d7ba and fixed by commit 5d73320a96fcc.
+
+/*\
+ * [Description]
*
- * ALGORITHM
- * 1. call sendfile(2) with offset at 0
- * 2. call sendfile(2) with offset at 3GB
+ * Testcase copied from sendfile02.c to test the basic functionality of
+ * the sendfile(2) system call on large file. There is a kernel bug which
+ * introduced by commit 8f9c0119d7ba9 and fixed by commit 5d73320a96fcc.
*
- * USAGE: <for command-line>
- * sendfile09 [-c n] [-i n] [-I x] [-P x] [-t]
- * where,
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
+ * Only supports 64bit systems.
*
+ * [Algorithm]
*
- * RESTRICTIONS
- * Only supports 64bit systems and kernel 2.6.33 or above
+ * 1. Call sendfile(2) with offset at 0;
+ * 2. Call sendfile(2) with offset at 3GB.
*/
-#include <stdio.h>
-#include <errno.h>
+
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/sendfile.h>
#include <sys/types.h>
#include <unistd.h>
#include <inttypes.h>
-#include "test.h"
-#include "safe_macros.h"
+
+#include "tst_test.h"
#include "lapi/abisize.h"
+#ifndef TST_ABI32
+
#ifndef OFF_T
#define OFF_T off_t
-#endif /* Not def: OFF_T */
-
-TCID_DEFINE(sendfile09);
-
-static char *in_file = "in";
-static char *out_file = "out";
-static int fd;
-static int in_fd;
-static int out_fd;
-
-static void cleanup(void);
-static void setup(void);
+#endif
-#define ONE_GB (INT64_C(1) << 30)
+#define ONE_GB (INT64_C(1) << 30)
+#define IN_FILE "in_file"
+#define OUT_FILE "out_file"
static struct test_case_t {
char *desc;
@@ -76,124 +44,72 @@ static struct test_case_t {
int64_t count;
int64_t exp_retval;
int64_t exp_updated_offset;
-} testcases[] = {
- { "Test sendfile(2) with offset at 0",
- 0, ONE_GB, ONE_GB, ONE_GB},
- { "Test sendfile(2) with offset at 3GB",
- 3*ONE_GB, ONE_GB, ONE_GB, 4*ONE_GB}
+} tc[] = {
+ { "offset at 0", 0, ONE_GB, ONE_GB, ONE_GB },
+ { "offset@3GB", 3 * ONE_GB, ONE_GB, ONE_GB, 4 * ONE_GB }
};
-static int TST_TOTAL = ARRAY_SIZE(testcases);
-
-void do_sendfile(struct test_case_t *t)
+static void setup(void)
{
- off_t before_pos, after_pos;
+ if (!tst_fs_has_free(".", 5, TST_GB))
+ tst_brk(TCONF, "Test on large file needs 5G free space");
- out_fd = SAFE_OPEN(cleanup, out_file, O_WRONLY);
- in_fd = SAFE_OPEN(cleanup, in_file, O_RDONLY);
- before_pos = SAFE_LSEEK(cleanup, in_fd, 0, SEEK_CUR);
-
- TEST(sendfile(out_fd, in_fd, &t->offset, t->count));
- if (TEST_RETURN == -1)
- tst_brkm(TBROK | TTERRNO, cleanup, "sendfile(2) failed");
-
- after_pos = SAFE_LSEEK(cleanup, in_fd, 0, SEEK_CUR);
-
- if (TEST_RETURN != t->exp_retval) {
- tst_resm(TFAIL, "sendfile(2) failed to return "
- "expected value, expected: %" PRId64 ", "
- "got: %ld", t->exp_retval,
- TEST_RETURN);
- } else if (t->offset != t->exp_updated_offset) {
- tst_resm(TFAIL, "sendfile(2) failed to update "
- "OFFSET parameter to expected value, "
- "expected: %" PRId64 ", got: %" PRId64,
- t->exp_updated_offset,
- (int64_t) t->offset);
- } else if (before_pos != after_pos) {
- tst_resm(TFAIL, "sendfile(2) updated the file position "
- " of in_fd unexpectedly, expected file position: %"
- PRId64 ", " " actual file position %" PRId64,
- (int64_t) before_pos, (int64_t) after_pos);
- } else {
- tst_resm(TPASS, "%s", t->desc);
+ int fd = SAFE_CREAT(IN_FILE, 00700);
+ for (int i = 1; i <= (4 * 1024); ++i) {
+ SAFE_LSEEK(fd, 1024 * 1024 - 1, SEEK_CUR);
+ SAFE_WRITE(1, fd, "C", 1);
}
+ SAFE_CLOSE(fd);
- close(in_fd);
- close(out_fd);
+ fd = SAFE_CREAT(OUT_FILE, 00700);
+ SAFE_CLOSE(fd);
}
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void setup(void)
+static void run(unsigned int i)
{
- int i;
-
- tst_sig(FORK, DEF_HANDLER, cleanup);
- TEST_PAUSE;
-
- /* make a temporary directory and cd to it */
- tst_tmpdir();
-
- if (!tst_fs_has_free(NULL, ".", 5, TST_GB))
- tst_brkm(TCONF, cleanup, "sendfile(2) on large file"
- " needs 5G free space.");
+ int in_fd = SAFE_OPEN(IN_FILE, O_RDONLY);
+ int out_fd = SAFE_OPEN(OUT_FILE, O_WRONLY);
+ OFF_T offset = tc[i].offset;
- /* create a 4G file */
- fd = SAFE_CREAT(cleanup, in_file, 00700);
- for (i = 1; i <= (4 * 1024); i++) {
- SAFE_LSEEK(cleanup, fd, 1024 * 1024 - 1, SEEK_CUR);
- SAFE_WRITE(cleanup, 1, fd, "C", 1);
- }
- close(fd);
-
- fd = SAFE_CREAT(cleanup, out_file, 00700);
- close(fd);
-}
-
-void cleanup(void)
-{
- if (fd > 0)
- close(fd);
-
- if (in_fd > 0)
- close(in_fd);
-
- if (out_fd > 0)
- close(out_fd);
-
- tst_rmdir();
+ off_t before_pos, after_pos;
+ before_pos = SAFE_LSEEK(in_fd, 0, SEEK_CUR);
+
+ TEST(sendfile(out_fd, in_fd, &offset, tc[i].count));
+ after_pos = SAFE_LSEEK(in_fd, 0, SEEK_CUR);
+
+ if (TST_RET != tc[i].exp_retval)
+ tst_res(TFAIL, "sendfile(2) failed to return expected value, "
+ "expected: %" PRId64 ", got: %ld",
+ tc[i].exp_retval, TST_RET);
+ else if (offset != tc[i].exp_updated_offset)
+ tst_res(TFAIL, "sendfile(2) failed to update OFFSET parameter to "
+ "expected value, expected: %" PRId64 ", got: %" PRId64,
+ tc[i].exp_updated_offset, (int64_t)(offset));
+ else if (before_pos != after_pos)
+ tst_res(TFAIL, "sendfile(2) updated the file position of in_fd "
+ "unexpectedly, expected file position: %" PRId64
+ ", actual file position %" PRId64,
+ (int64_t)(before_pos), (int64_t)(after_pos));
+ else
+ tst_res(TPASS, "sendfile(2) with %s", tc[i].desc);
+
+ SAFE_CLOSE(in_fd);
+ SAFE_CLOSE(out_fd);
}
-int main(int ac, char **av)
-{
- int i;
- int lc;
-
-#ifdef TST_ABI32
- tst_brkm(TCONF, NULL, "This test is only for 64bit");
-#endif
-
- if (tst_kvercmp(2, 6, 33) < 0) {
- tst_resm(TINFO, "sendfile(2) on large file "
- "skipped for kernels < 2.6.33");
- return 0;
- }
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- /*
- * The following loop checks looping state if -c option given
- */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- tst_count = 0;
- for (i = 0; i < TST_TOTAL; ++i)
- do_sendfile(&testcases[i]);
+static struct tst_test test = {
+ .needs_tmpdir = 1,
+ .setup = setup,
+ .test = run,
+ .tcnt = ARRAY_SIZE(tc),
+ .min_kver = "2.6.33",
+ .tags = (const struct tst_tag[]) {
+ {"linux-git", "8f9c0119d7ba9"},
+ {"linux-git", "5d73320a96fcc"},
+ {}
}
+};
- cleanup();
- tst_exit();
-}
+#else
+TST_TEST_TCONF("This test is only for 64bit");
+#endif
--
2.17.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [LTP] [PATCH 0/2 v2] syscalls/sendfile: Convert sendfile{08, 09} to the new API
2021-05-20 9:24 [LTP] [PATCH 0/2 v2] syscalls/sendfile: Convert sendfile{08, 09} to the new API Xie Ziyao
2021-05-20 9:24 ` [LTP] [PATCH 1/2 v2] syscalls/sendfile: Convert sendfile08 " Xie Ziyao
2021-05-20 9:24 ` [LTP] [PATCH 2/2 v2] syscalls/sendfile: Convert sendfile09 " Xie Ziyao
@ 2021-05-25 15:25 ` Petr Vorel
2021-05-26 9:11 ` Cyril Hrubis
2 siblings, 1 reply; 6+ messages in thread
From: Petr Vorel @ 2021-05-25 15:25 UTC (permalink / raw)
To: ltp
Hi Ziyao,
As I noted at v2 (just for a record repeat here) I merged v1 with my fixes as I
didn't notice v2.
By accident, I changed
off_t before_pos, after_pos;
to:
OFF_T before_pos, after_pos;
@Cyril: should it be reverted?
> v1->v2:
> 1. Add kernel commit to the tst_test structure as a tags;
> 2. Move [Restrictions] to [Description] for sendfile09;
> 3. Fix the bug in the previous version for sendfile09 on 32-bit:
> + #include "lapi/abisize.h"
> +
> + #ifndef TST_ABI32
> ...
> + #else
> + TST_TEST_TCONF("This test is only for 64bit");
> + #endif
You still omitted:
* keeping 8f9c0119d7ba9 in tags which caused the kernel bug
* keeping int in for loop breaks compilation on older toolchains:
for (int i = 1; i <= (4 * 1024); ++i) {
* int fd = SAFE_CREAT(IN_FILE, 00700); shouldn't be a problem
(we probably have new enough compilers, it's mostly a problem in for loop),
but we define variables before using them.
Diff what was merged from your v2.
Thanks!
Kind regards,
Petr
diff --git testcases/kernel/syscalls/sendfile/sendfile08.c testcases/kernel/syscalls/sendfile/sendfile08.c
index ddb8f1dd2..48a971bfb 100644
--- testcases/kernel/syscalls/sendfile/sendfile08.c
+++ testcases/kernel/syscalls/sendfile/sendfile08.c
@@ -14,11 +14,7 @@
*/
#include <stdio.h>
-#include <fcntl.h>
#include <string.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/types.h>
#include <sys/sendfile.h>
#include "tst_test.h"
@@ -40,15 +36,17 @@ static void run(void)
tst_brk(TBROK | TTERRNO, "sendfile() failed");
char buf[BUFSIZ];
+
SAFE_LSEEK(out_fd, 0, SEEK_SET);
SAFE_READ(0, out_fd, buf, BUFSIZ);
- if (!strncmp(buf, TEST_MSG_ALL, strlen(TEST_MSG_ALL)))
- tst_res(TPASS, "sendfile(2) copies data correctly");
- else
- tst_res(TFAIL, "sendfile(2) copies data incorrectly. "
- "Expect \"%s%s\", got \"%s\"",
- TEST_MSG_OUT, TEST_MSG_IN, buf);
+ if (!strncmp(buf, TEST_MSG_ALL, strlen(TEST_MSG_ALL))) {
+ tst_res(TPASS, "sendfile() copies data correctly");
+ return;
+ }
+
+ tst_res(TFAIL, "sendfile() copies data incorrectly: '%s' expected: '%s%s'",
+ buf, TEST_MSG_OUT, TEST_MSG_IN);
}
static void setup(void)
diff --git testcases/kernel/syscalls/sendfile/sendfile09.c testcases/kernel/syscalls/sendfile/sendfile09.c
index 667e314bb..297b3e212 100644
--- testcases/kernel/syscalls/sendfile/sendfile09.c
+++ testcases/kernel/syscalls/sendfile/sendfile09.c
@@ -7,23 +7,19 @@
* [Description]
*
* Testcase copied from sendfile02.c to test the basic functionality of
- * the sendfile(2) system call on large file. There is a kernel bug which
+ * the sendfile() system call on large file. There is a kernel bug which
* introduced by commit 8f9c0119d7ba9 and fixed by commit 5d73320a96fcc.
*
* Only supports 64bit systems.
*
* [Algorithm]
*
- * 1. Call sendfile(2) with offset at 0;
- * 2. Call sendfile(2) with offset at 3GB.
+ * 1. Call sendfile() with offset at 0.
+ * 2. Call sendfile() with offset at 3GB.
*/
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/sendfile.h>
-#include <sys/types.h>
-#include <unistd.h>
#include <inttypes.h>
+#include <sys/sendfile.h>
#include "tst_test.h"
#include "lapi/abisize.h"
@@ -51,11 +47,13 @@ static struct test_case_t {
static void setup(void)
{
+ int i, fd;
+
if (!tst_fs_has_free(".", 5, TST_GB))
tst_brk(TCONF, "Test on large file needs 5G free space");
- int fd = SAFE_CREAT(IN_FILE, 00700);
- for (int i = 1; i <= (4 * 1024); ++i) {
+ fd = SAFE_CREAT(IN_FILE, 00700);
+ for (i = 1; i <= (4 * 1024); ++i) {
SAFE_LSEEK(fd, 1024 * 1024 - 1, SEEK_CUR);
SAFE_WRITE(1, fd, "C", 1);
}
@@ -71,27 +69,27 @@ static void run(unsigned int i)
int out_fd = SAFE_OPEN(OUT_FILE, O_WRONLY);
OFF_T offset = tc[i].offset;
- off_t before_pos, after_pos;
+ OFF_T before_pos, after_pos;
before_pos = SAFE_LSEEK(in_fd, 0, SEEK_CUR);
TEST(sendfile(out_fd, in_fd, &offset, tc[i].count));
after_pos = SAFE_LSEEK(in_fd, 0, SEEK_CUR);
if (TST_RET != tc[i].exp_retval)
- tst_res(TFAIL, "sendfile(2) failed to return expected value, "
+ tst_res(TFAIL, "sendfile() failed to return expected value, "
"expected: %" PRId64 ", got: %ld",
tc[i].exp_retval, TST_RET);
else if (offset != tc[i].exp_updated_offset)
- tst_res(TFAIL, "sendfile(2) failed to update OFFSET parameter to "
+ tst_res(TFAIL, "sendfile() failed to update OFFSET parameter to "
"expected value, expected: %" PRId64 ", got: %" PRId64,
tc[i].exp_updated_offset, (int64_t)(offset));
else if (before_pos != after_pos)
- tst_res(TFAIL, "sendfile(2) updated the file position of in_fd "
+ tst_res(TFAIL, "sendfile() updated the file position of in_fd "
"unexpectedly, expected file position: %" PRId64
", actual file position %" PRId64,
(int64_t)(before_pos), (int64_t)(after_pos));
else
- tst_res(TPASS, "sendfile(2) with %s", tc[i].desc);
+ tst_res(TPASS, "sendfile() with %s", tc[i].desc);
SAFE_CLOSE(in_fd);
SAFE_CLOSE(out_fd);
@@ -104,7 +102,6 @@ static struct tst_test test = {
.tcnt = ARRAY_SIZE(tc),
.min_kver = "2.6.33",
.tags = (const struct tst_tag[]) {
- {"linux-git", "8f9c0119d7ba9"},
{"linux-git", "5d73320a96fcc"},
{}
}
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [LTP] [PATCH 0/2 v2] syscalls/sendfile: Convert sendfile{08, 09} to the new API
2021-05-25 15:25 ` [LTP] [PATCH 0/2 v2] syscalls/sendfile: Convert sendfile{08, 09} " Petr Vorel
@ 2021-05-26 9:11 ` Cyril Hrubis
2021-05-26 10:32 ` Petr Vorel
0 siblings, 1 reply; 6+ messages in thread
From: Cyril Hrubis @ 2021-05-26 9:11 UTC (permalink / raw)
To: ltp
Hi!
> By accident, I changed
> off_t before_pos, after_pos;
> to:
> OFF_T before_pos, after_pos;
>
> @Cyril: should it be reverted?
There is a define in the Makefile that defines OFF_T to off64_t for
_FILE_OFFSET_BITS=64 but that looks like a workaround for buggy libc.
The _FILE_OFFSET_BITS=64 should, when code is compiled on 32bit
platform, change the 32bit off_t to a 64bit off_t.
I.e. when you compile following:
int main(void)
{
printf("%zu\n", sizeof(off_t));
return 0;
}
on a 32bit (or with -m32) it should print 4
on a 32bit with -D_FILE_OFFSET_BITS=64 it should print 8
on a 64bit it should print 8 regardless
As far as I can tell we should remove the OFF_T handling from the
Makefile here instead.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 6+ messages in thread
* [LTP] [PATCH 0/2 v2] syscalls/sendfile: Convert sendfile{08, 09} to the new API
2021-05-26 9:11 ` Cyril Hrubis
@ 2021-05-26 10:32 ` Petr Vorel
0 siblings, 0 replies; 6+ messages in thread
From: Petr Vorel @ 2021-05-26 10:32 UTC (permalink / raw)
To: ltp
Hi Cyril,
> Hi!
> > By accident, I changed
> > off_t before_pos, after_pos;
> > to:
> > OFF_T before_pos, after_pos;
> > @Cyril: should it be reverted?
> There is a define in the Makefile that defines OFF_T to off64_t for
> _FILE_OFFSET_BITS=64 but that looks like a workaround for buggy libc.
> The _FILE_OFFSET_BITS=64 should, when code is compiled on 32bit
> platform, change the 32bit off_t to a 64bit off_t.
Thanks for info. I noticed Makefile myself, but didn't know the background.
> I.e. when you compile following:
> int main(void)
> {
> printf("%zu\n", sizeof(off_t));
> return 0;
> }
> on a 32bit (or with -m32) it should print 4
> on a 32bit with -D_FILE_OFFSET_BITS=64 it should print 8
> on a 64bit it should print 8 regardless
Yep (verified myself).
> As far as I can tell we should remove the OFF_T handling from the
> Makefile here instead.
OK, I'll send a patch which removes off64_t from Makefile and use
always off_t.
Kind regards,
Petr
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-05-26 10:32 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-20 9:24 [LTP] [PATCH 0/2 v2] syscalls/sendfile: Convert sendfile{08, 09} to the new API Xie Ziyao
2021-05-20 9:24 ` [LTP] [PATCH 1/2 v2] syscalls/sendfile: Convert sendfile08 " Xie Ziyao
2021-05-20 9:24 ` [LTP] [PATCH 2/2 v2] syscalls/sendfile: Convert sendfile09 " Xie Ziyao
2021-05-25 15:25 ` [LTP] [PATCH 0/2 v2] syscalls/sendfile: Convert sendfile{08, 09} " Petr Vorel
2021-05-26 9:11 ` Cyril Hrubis
2021-05-26 10:32 ` Petr Vorel
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.