blob: e9b48c392fbcbd7ad37b8888cb1d02110aacfd77 [file] [log] [blame]
From 3cca69b85c88c6eb4f02313b3c6a9e0f6cc0b5d7 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 14 Dec 2022 18:14:22 -0800
Subject: [PATCH] testcases: Fix largefile support
Use standard functions ( not 64-bit equivalents ) which operate on off_t
and pass -D_FILE_OFFSET_BITS=64 to enable LFS always so off_t is 64bit
for these tests.
This helps making it portable across musl which has removed the 64bit
transition functions from _GNU_SOURCE namespace.
Upstream-Status: Submitted [https://lists.linux.it/pipermail/ltp/2022-December/032310.html]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
testcases/kernel/io/direct_io/Makefile | 2 +-
testcases/kernel/io/direct_io/diotest2.c | 4 ++--
testcases/kernel/io/direct_io/diotest5.c | 10 +++++-----
testcases/kernel/io/direct_io/diotest6.c | 4 ++--
testcases/kernel/syscalls/fcntl/fcntl18.c | 6 +++---
testcases/kernel/syscalls/fcntl/fcntl34.c | 2 +-
testcases/kernel/syscalls/fcntl/fcntl36.c | 4 ++--
testcases/kernel/syscalls/llseek/Makefile | 2 ++
testcases/kernel/syscalls/llseek/llseek01.c | 14 +++++++-------
testcases/kernel/syscalls/llseek/llseek02.c | 12 ++++++------
testcases/kernel/syscalls/llseek/llseek03.c | 6 +++---
testcases/kernel/syscalls/open/Makefile | 2 ++
testcases/kernel/syscalls/open/open12.c | 6 +++---
testcases/kernel/syscalls/openat/Makefile | 2 ++
testcases/kernel/syscalls/openat/openat02.c | 6 +++---
testcases/kernel/syscalls/sync_file_range/Makefile | 2 ++
.../syscalls/sync_file_range/sync_file_range01.c | 4 ++--
.../syscalls/sync_file_range/sync_file_range02.c | 6 +++---
18 files changed, 51 insertions(+), 43 deletions(-)
diff --git a/testcases/kernel/io/direct_io/Makefile b/testcases/kernel/io/direct_io/Makefile
index 777f7b166..7480d7b0d 100644
--- a/testcases/kernel/io/direct_io/Makefile
+++ b/testcases/kernel/io/direct_io/Makefile
@@ -5,7 +5,7 @@ top_srcdir ?= ../../../..
include $(top_srcdir)/include/mk/testcases.mk
-CFLAGS += -DSHARED_OFILE -D_GNU_SOURCE
+CFLAGS += -DSHARED_OFILE -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
LDLIBS += -lpthread
diff --git a/testcases/kernel/io/direct_io/diotest2.c b/testcases/kernel/io/direct_io/diotest2.c
index c407c46ae..db47ee8ef 100644
--- a/testcases/kernel/io/direct_io/diotest2.c
+++ b/testcases/kernel/io/direct_io/diotest2.c
@@ -78,7 +78,7 @@ int bufsize = BUFSIZE;
* 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)
+int runtest(int fd_r, int fd_w, int iter, off_t offset, int action)
{
char *buf1;
char *buf2;
@@ -136,7 +136,7 @@ static void cleanup(void);
int main(int argc, char *argv[])
{
int iter = 100; /* Iterations. Default 100 */
- off64_t offset = 0; /* Offset. Default 0 */
+ off_t offset = 0; /* Offset. Default 0 */
int i, action, fd_r, fd_w;
int fail_count = 0, total = 0, failed = 0;
diff --git a/testcases/kernel/io/direct_io/diotest5.c b/testcases/kernel/io/direct_io/diotest5.c
index 9bf917c64..ac66f2a04 100644
--- a/testcases/kernel/io/direct_io/diotest5.c
+++ b/testcases/kernel/io/direct_io/diotest5.c
@@ -75,14 +75,14 @@ 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 off_t offset = 0; /* Start offset. Default 0 */
static char filename[LEN]; /* Test data file */
static int fd1 = -1;
/*
* 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)
+int runtest(int fd_r, int fd_w, int iter, off_t offset, int action)
{
int i;
struct iovec *iov1, *iov2, *iovp;
@@ -218,7 +218,7 @@ int main(int argc, char *argv[])
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) {
+ if ((fd_r = open(filename, O_DIRECT | O_RDONLY | O_CREAT, 0666)) < 0) {
tst_brkm(TBROK, cleanup, "fd_r open failed for %s: %s",
filename, strerror(errno));
}
@@ -240,7 +240,7 @@ int main(int argc, char *argv[])
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) {
+ if ((fd_r = open(filename, O_RDONLY | O_CREAT, 0666)) < 0) {
tst_brkm(TBROK, cleanup, "fd_r open failed for %s: %s",
filename, strerror(errno));
}
@@ -261,7 +261,7 @@ int main(int argc, char *argv[])
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) {
+ if ((fd_r = open(filename, O_DIRECT | O_RDONLY | O_CREAT, 0666)) < 0) {
tst_brkm(TBROK, cleanup, "fd_r open failed for %s: %s",
filename, strerror(errno));
}
diff --git a/testcases/kernel/io/direct_io/diotest6.c b/testcases/kernel/io/direct_io/diotest6.c
index a06e6b82b..1905380f0 100644
--- a/testcases/kernel/io/direct_io/diotest6.c
+++ b/testcases/kernel/io/direct_io/diotest6.c
@@ -62,7 +62,7 @@ int TST_TOTAL = 3;
static int iter = 100;
static int bufsize = BUFSIZE;
-static off64_t offset = 0;
+static off_t offset = 0;
static int nvector = 20;
static char filename[LEN];
static int fd1 = -1;
@@ -84,7 +84,7 @@ static void prg_usage(void)
*/
int runtest(int fd_r, int fd_w, int childnum, int action)
{
- off64_t seekoff;
+ off_t seekoff;
int i, ret = -1;
ssize_t n = 0;
struct iovec *iov_r, *iov_w;
diff --git a/testcases/kernel/syscalls/fcntl/fcntl18.c b/testcases/kernel/syscalls/fcntl/fcntl18.c
index 5eefbd128..1105dd393 100644
--- a/testcases/kernel/syscalls/fcntl/fcntl18.c
+++ b/testcases/kernel/syscalls/fcntl/fcntl18.c
@@ -103,11 +103,11 @@ int main(int ac, char **av)
tst_resm(TINFO, "Enter block 2");
fail = 0;
/* Error condition if address is bad */
- retval = fcntl(fd, F_GETLK64, (struct flock *)INVAL_FLAG);
+ retval = fcntl(fd, F_GETLK, (struct flock *)INVAL_FLAG);
if (errno == EFAULT) {
- tst_resm(TPASS, "Test F_GETLK64: for errno EFAULT PASSED");
+ tst_resm(TPASS, "Test F_GETLK: for errno EFAULT PASSED");
} else {
- tst_resm(TFAIL, "Test F_GETLK64: for errno EFAULT FAILED");
+ tst_resm(TFAIL, "Test F_GETLK: for errno EFAULT FAILED");
fail = 1;
}
if (fail) {
diff --git a/testcases/kernel/syscalls/fcntl/fcntl34.c b/testcases/kernel/syscalls/fcntl/fcntl34.c
index 3442114ff..536dead29 100644
--- a/testcases/kernel/syscalls/fcntl/fcntl34.c
+++ b/testcases/kernel/syscalls/fcntl/fcntl34.c
@@ -54,7 +54,7 @@ void *thread_fn_01(void *arg)
memset(buf, (intptr_t)arg, write_size);
- struct flock64 lck = {
+ struct flock lck = {
.l_whence = SEEK_SET,
.l_start = 0,
.l_len = 1,
diff --git a/testcases/kernel/syscalls/fcntl/fcntl36.c b/testcases/kernel/syscalls/fcntl/fcntl36.c
index d6b07fc41..4e4d48afc 100644
--- a/testcases/kernel/syscalls/fcntl/fcntl36.c
+++ b/testcases/kernel/syscalls/fcntl/fcntl36.c
@@ -72,7 +72,7 @@ static void *fn_ofd_w(void *arg)
int fd = SAFE_OPEN(fname, O_RDWR);
long wt = pa->cnt;
- struct flock64 lck = {
+ struct flock lck = {
.l_whence = SEEK_SET,
.l_start = pa->offset,
.l_len = pa->length,
@@ -151,7 +151,7 @@ static void *fn_ofd_r(void *arg)
int i;
int fd = SAFE_OPEN(fname, O_RDWR);
- struct flock64 lck = {
+ struct flock lck = {
.l_whence = SEEK_SET,
.l_start = pa->offset,
.l_len = pa->length,
diff --git a/testcases/kernel/syscalls/llseek/Makefile b/testcases/kernel/syscalls/llseek/Makefile
index 044619fb8..8a916d0fa 100644
--- a/testcases/kernel/syscalls/llseek/Makefile
+++ b/testcases/kernel/syscalls/llseek/Makefile
@@ -6,3 +6,5 @@ top_srcdir ?= ../../../..
include $(top_srcdir)/include/mk/testcases.mk
include $(top_srcdir)/include/mk/generic_leaf_target.mk
+
+CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
diff --git a/testcases/kernel/syscalls/llseek/llseek01.c b/testcases/kernel/syscalls/llseek/llseek01.c
index 50f35493d..efb444dc8 100644
--- a/testcases/kernel/syscalls/llseek/llseek01.c
+++ b/testcases/kernel/syscalls/llseek/llseek01.c
@@ -4,7 +4,7 @@
* 07/2001 Ported by Wayne Boyer
*/
/*
- * Verify that lseek64() call succeeds to set the file pointer position to an
+ * Verify that lseek() call succeeds to set the file pointer position to an
* offset larger than file size limit (RLIMIT_FSIZE). Also, verify that any
* attempt to write to this location fails.
*/
@@ -27,22 +27,22 @@ static int fildes;
static void verify_llseek(void)
{
- TEST(lseek64(fildes, (loff_t) (80 * BUFSIZ), SEEK_SET));
+ TEST(lseek(fildes, (loff_t) (80 * BUFSIZ), SEEK_SET));
if (TST_RET == (80 * BUFSIZ))
- tst_res(TPASS, "lseek64() can set file pointer position larger than file size limit");
+ tst_res(TPASS, "lseek() can set file pointer position larger than file size limit");
else
- tst_res(TFAIL, "lseek64() returned wrong value %ld when write past file size", TST_RET);
+ tst_res(TFAIL, "lseek() returned wrong value %ld when write past file size", TST_RET);
if (write(fildes, write_buff, BUFSIZ) == -1)
tst_res(TPASS,"write failed after file size limit");
else
tst_brk(TFAIL, "write successful after file size limit");
- TEST(lseek64(fildes, (loff_t) BUFSIZ, SEEK_SET));
+ TEST(lseek(fildes, (loff_t) BUFSIZ, SEEK_SET));
if (TST_RET == BUFSIZ)
- tst_res(TPASS,"lseek64() can set file pointer position under filer size limit");
+ tst_res(TPASS,"lseek() can set file pointer position under filer size limit");
else
- tst_brk(TFAIL,"lseek64() returns wrong value %ld when write under file size", TST_RET);
+ tst_brk(TFAIL,"lseek() returns wrong value %ld when write under file size", TST_RET);
if (write(fildes, write_buff, BUFSIZ) != -1)
tst_res(TPASS, "write succcessfully under file size limit");
diff --git a/testcases/kernel/syscalls/llseek/llseek02.c b/testcases/kernel/syscalls/llseek/llseek02.c
index 3d9c21fc9..5431969f9 100644
--- a/testcases/kernel/syscalls/llseek/llseek02.c
+++ b/testcases/kernel/syscalls/llseek/llseek02.c
@@ -5,8 +5,8 @@
*/
/*
* Description:
- * 1) lseek64(2) fails and sets errno to EINVAL when whence is invalid.
- * 2) lseek64(2) fails ans sets errno to EBADF when fd is not an open
+ * 1) lseek(2) fails and sets errno to EINVAL when whence is invalid.
+ * 2) lseek(2) fails ans sets errno to EBADF when fd is not an open
* file descriptor.
*/
@@ -39,17 +39,17 @@ static void verify_llseek(unsigned int n)
{
struct tcase *tc = &tcases[n];
- TEST(lseek64(*tc->fd, (loff_t) 1, tc->whence));
+ TEST(lseek(*tc->fd, (loff_t) 1, tc->whence));
if (TST_RET != (off_t) -1) {
- tst_res(TFAIL, "lseek64(%d, 1, %d) succeeded unexpectedly (%ld)",
+ tst_res(TFAIL, "lseek(%d, 1, %d) succeeded unexpectedly (%ld)",
*tc->fd, tc->whence, TST_RET);
return;
}
if (TST_ERR == tc->exp_err) {
- tst_res(TPASS | TTERRNO, "lseek64(%d, 1, %d) failed as expected",
+ tst_res(TPASS | TTERRNO, "lseek(%d, 1, %d) failed as expected",
*tc->fd, tc->whence);
} else {
- tst_res(TFAIL | TTERRNO, "lseek64(%d, 1, %d) failed "
+ tst_res(TFAIL | TTERRNO, "lseek(%d, 1, %d) failed "
"unexpectedly, expected %s", *tc->fd, tc->whence,
tst_strerrno(tc->exp_err));
}
diff --git a/testcases/kernel/syscalls/llseek/llseek03.c b/testcases/kernel/syscalls/llseek/llseek03.c
index d780f2af6..6c34119e5 100644
--- a/testcases/kernel/syscalls/llseek/llseek03.c
+++ b/testcases/kernel/syscalls/llseek/llseek03.c
@@ -72,7 +72,7 @@ static const char *str_whence(int whence)
}
}
-static void verify_lseek64(unsigned int n)
+static void verify_lseek(unsigned int n)
{
struct tcase *tc = &tcases[n];
char read_buf[128];
@@ -82,7 +82,7 @@ static void verify_lseek64(unsigned int n)
SAFE_READ(1, fd, read_buf, 4);
- TEST(lseek64(fd, tc->off, tc->whence));
+ TEST(lseek(fd, tc->off, tc->whence));
if (TST_RET == -1) {
tst_res(TFAIL | TTERRNO, "llseek failed on %s ", TEST_FILE);
@@ -121,6 +121,6 @@ exit:
static struct tst_test test = {
.needs_tmpdir = 1,
.setup = setup,
- .test = verify_lseek64,
+ .test = verify_lseek,
.tcnt = ARRAY_SIZE(tcases),
};
diff --git a/testcases/kernel/syscalls/open/Makefile b/testcases/kernel/syscalls/open/Makefile
index 044619fb8..8a916d0fa 100644
--- a/testcases/kernel/syscalls/open/Makefile
+++ b/testcases/kernel/syscalls/open/Makefile
@@ -6,3 +6,5 @@ top_srcdir ?= ../../../..
include $(top_srcdir)/include/mk/testcases.mk
include $(top_srcdir)/include/mk/generic_leaf_target.mk
+
+CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
diff --git a/testcases/kernel/syscalls/open/open12.c b/testcases/kernel/syscalls/open/open12.c
index bdf29a9a8..c840de53d 100644
--- a/testcases/kernel/syscalls/open/open12.c
+++ b/testcases/kernel/syscalls/open/open12.c
@@ -233,14 +233,14 @@ static void test_cloexec(void)
static void test_largefile(void)
{
int fd;
- off64_t offset;
+ off_t offset;
fd = SAFE_OPEN(cleanup, LARGE_FILE,
O_LARGEFILE | O_RDWR | O_CREAT, 0777);
- offset = lseek64(fd, 4.1*1024*1024*1024, SEEK_SET);
+ offset = lseek(fd, 4.1*1024*1024*1024, SEEK_SET);
if (offset == -1)
- tst_brkm(TBROK | TERRNO, cleanup, "lseek64 failed");
+ tst_brkm(TBROK | TERRNO, cleanup, "lseek failed");
SAFE_WRITE(cleanup, 1, fd, LARGE_FILE, sizeof(LARGE_FILE));
diff --git a/testcases/kernel/syscalls/openat/Makefile b/testcases/kernel/syscalls/openat/Makefile
index 044619fb8..8a916d0fa 100644
--- a/testcases/kernel/syscalls/openat/Makefile
+++ b/testcases/kernel/syscalls/openat/Makefile
@@ -6,3 +6,5 @@ top_srcdir ?= ../../../..
include $(top_srcdir)/include/mk/testcases.mk
include $(top_srcdir)/include/mk/generic_leaf_target.mk
+
+CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
diff --git a/testcases/kernel/syscalls/openat/openat02.c b/testcases/kernel/syscalls/openat/openat02.c
index 2ce119033..f6113852a 100644
--- a/testcases/kernel/syscalls/openat/openat02.c
+++ b/testcases/kernel/syscalls/openat/openat02.c
@@ -22,7 +22,7 @@
* 2)openat() succeeds to enable the close-on-exec flag for a
* file descriptor, when 'flags' is set to O_CLOEXEC.
* 3)openat() succeeds to allow files whose sizes cannot be
- * represented in an off_t but can be represented in an off64_t
+ * represented in an off_t but can be represented in an off_t
* to be opened, when 'flags' is set to O_LARGEFILE.
* 4)openat() succeeds to not update the file last access time
* (st_atime in the inode) when the file is read, when 'flags'
@@ -193,12 +193,12 @@ void testfunc_cloexec(void)
void testfunc_largefile(void)
{
int fd;
- off64_t offset;
+ off_t offset;
fd = SAFE_OPEN(cleanup, LARGE_FILE,
O_LARGEFILE | O_RDWR | O_CREAT, 0777);
- offset = lseek64(fd, 4.1*1024*1024*1024, SEEK_SET);
+ offset = lseek(fd, 4.1*1024*1024*1024, SEEK_SET);
if (offset == -1)
tst_brkm(TBROK | TERRNO, cleanup, "lseek64 failed");
diff --git a/testcases/kernel/syscalls/sync_file_range/Makefile b/testcases/kernel/syscalls/sync_file_range/Makefile
index 044619fb8..8a916d0fa 100644
--- a/testcases/kernel/syscalls/sync_file_range/Makefile
+++ b/testcases/kernel/syscalls/sync_file_range/Makefile
@@ -6,3 +6,5 @@ top_srcdir ?= ../../../..
include $(top_srcdir)/include/mk/testcases.mk
include $(top_srcdir)/include/mk/generic_leaf_target.mk
+
+CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
diff --git a/testcases/kernel/syscalls/sync_file_range/sync_file_range01.c b/testcases/kernel/syscalls/sync_file_range/sync_file_range01.c
index 187ef6071..47188aa48 100644
--- a/testcases/kernel/syscalls/sync_file_range/sync_file_range01.c
+++ b/testcases/kernel/syscalls/sync_file_range/sync_file_range01.c
@@ -44,8 +44,8 @@ static int bfd = -1;
struct test_case {
int *fd;
- off64_t offset;
- off64_t nbytes;
+ off_t offset;
+ off_t nbytes;
unsigned int flags;
int error;
} tcases[] = {
diff --git a/testcases/kernel/syscalls/sync_file_range/sync_file_range02.c b/testcases/kernel/syscalls/sync_file_range/sync_file_range02.c
index 5da751c70..28a8156c8 100644
--- a/testcases/kernel/syscalls/sync_file_range/sync_file_range02.c
+++ b/testcases/kernel/syscalls/sync_file_range/sync_file_range02.c
@@ -31,10 +31,10 @@
struct testcase {
char *fname;
- off64_t sync_off;
- off64_t sync_size;
+ off_t sync_off;
+ off_t sync_size;
size_t exp_sync_size;
- off64_t write_off;
+ off_t write_off;
size_t write_size_mb;
const char *desc;
};