[LTP] [PATCH] syscalls: Allocate handles at setup time only
Viresh Kumar
viresh.kumar@linaro.org
Tue Dec 8 11:59:53 CET 2020
Move the allocation of handles to setup time only, so the run() helper
can focus on the syscall to test.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
Cyril, I think you merged the patch for open_by_handle_at by mistake,
and that too without your signed-off.
commit 81e0821e1fc1 ("syscalls: Add tests for open_by_handle_at()")
Here is what you asked for in your earlier email.
.../open_by_handle_at/open_by_handle_at01.c | 83 +++++++++----------
1 file changed, 41 insertions(+), 42 deletions(-)
diff --git a/testcases/kernel/syscalls/open_by_handle_at/open_by_handle_at01.c b/testcases/kernel/syscalls/open_by_handle_at/open_by_handle_at01.c
index 35597a13c182..2583bc3a186d 100644
--- a/testcases/kernel/syscalls/open_by_handle_at/open_by_handle_at01.c
+++ b/testcases/kernel/syscalls/open_by_handle_at/open_by_handle_at01.c
@@ -21,42 +21,23 @@
#define TEST_DIR "test_dir"
static int dir_fd, fd_atcwd = AT_FDCWD, file_fd;
-static struct file_handle *fhp;
+static struct file_handle *f_fhp, *d_fhp, *at_fhp;
+static struct file_handle *f_fhp, *d_fhp, *at_fhp;
static struct tcase {
int *dfd;
- const char *pathname;
- int name_flags;
+ struct file_handle **fhp;
int flags;
} tcases[] = {
- {&dir_fd, TEST_FILE, 0, O_RDWR},
- {&dir_fd, TEST_FILE, 0, O_RDONLY},
- {&dir_fd, TEST_FILE, 0, O_WRONLY},
- {&dir_fd, TEST_FILE, AT_EMPTY_PATH, O_RDWR},
- {&dir_fd, TEST_FILE, AT_EMPTY_PATH, O_RDONLY},
- {&dir_fd, TEST_FILE, AT_EMPTY_PATH, O_WRONLY},
- {&dir_fd, TEST_FILE, AT_SYMLINK_FOLLOW, O_RDWR},
- {&dir_fd, TEST_FILE, AT_SYMLINK_FOLLOW, O_RDONLY},
- {&dir_fd, TEST_FILE, AT_SYMLINK_FOLLOW, O_WRONLY},
- {&dir_fd, TEST_FILE, AT_EMPTY_PATH | AT_SYMLINK_FOLLOW, O_RDWR},
- {&dir_fd, TEST_FILE, AT_EMPTY_PATH | AT_SYMLINK_FOLLOW, O_RDONLY},
- {&dir_fd, TEST_FILE, AT_EMPTY_PATH | AT_SYMLINK_FOLLOW, O_WRONLY},
- {&dir_fd, "", AT_EMPTY_PATH, O_RDONLY},
- {&file_fd, "", AT_EMPTY_PATH, O_RDONLY},
-
- {&fd_atcwd, TEST_FILE, 0, O_RDWR},
- {&fd_atcwd, TEST_FILE, 0, O_RDONLY},
- {&fd_atcwd, TEST_FILE, 0, O_WRONLY},
- {&fd_atcwd, TEST_FILE, AT_EMPTY_PATH, O_RDWR},
- {&fd_atcwd, TEST_FILE, AT_EMPTY_PATH, O_RDONLY},
- {&fd_atcwd, TEST_FILE, AT_EMPTY_PATH, O_WRONLY},
- {&fd_atcwd, TEST_FILE, AT_SYMLINK_FOLLOW, O_RDWR},
- {&fd_atcwd, TEST_FILE, AT_SYMLINK_FOLLOW, O_RDONLY},
- {&fd_atcwd, TEST_FILE, AT_SYMLINK_FOLLOW, O_WRONLY},
- {&fd_atcwd, TEST_FILE, AT_EMPTY_PATH | AT_SYMLINK_FOLLOW, O_RDWR},
- {&fd_atcwd, TEST_FILE, AT_EMPTY_PATH | AT_SYMLINK_FOLLOW, O_RDONLY},
- {&fd_atcwd, TEST_FILE, AT_EMPTY_PATH | AT_SYMLINK_FOLLOW, O_WRONLY},
- {&fd_atcwd, "", AT_EMPTY_PATH, O_RDONLY},
+ {&dir_fd, &d_fhp, O_RDWR},
+ {&dir_fd, &d_fhp, O_RDONLY},
+ {&dir_fd, &d_fhp, O_WRONLY},
+ {&file_fd, &f_fhp, O_RDWR},
+ {&file_fd, &f_fhp, O_RDONLY},
+ {&file_fd, &f_fhp, O_WRONLY},
+ {&fd_atcwd, &at_fhp, O_RDWR},
+ {&fd_atcwd, &at_fhp, O_RDONLY},
+ {&fd_atcwd, &at_fhp, O_WRONLY},
};
static void cleanup(void)
@@ -67,28 +48,46 @@ static void cleanup(void)
static void setup(void)
{
+ int mount_id;
+
SAFE_MKDIR(TEST_DIR, 0700);
dir_fd = SAFE_OPEN(TEST_DIR, O_DIRECTORY);
SAFE_CHDIR(TEST_DIR);
SAFE_TOUCH(TEST_FILE, 0600, NULL);
file_fd = SAFE_OPEN("foo_file", O_RDWR | O_CREAT);
- fhp = allocate_file_handle(AT_FDCWD, TEST_FILE);
+
+ f_fhp = allocate_file_handle(AT_FDCWD, TEST_FILE);
+ d_fhp = allocate_file_handle(AT_FDCWD, TEST_FILE);
+ at_fhp = allocate_file_handle(AT_FDCWD, TEST_FILE);
+
+ TEST(name_to_handle_at(file_fd, "", f_fhp, &mount_id, AT_EMPTY_PATH));
+ if (TST_RET) {
+ tst_res(TFAIL | TTERRNO, "name_to_handle_at() failed");
+ return;
+ }
+
+ TEST(name_to_handle_at(dir_fd, TEST_FILE, d_fhp, &mount_id,
+ AT_EMPTY_PATH | AT_SYMLINK_FOLLOW));
+ if (TST_RET) {
+ tst_res(TFAIL | TTERRNO, "name_to_handle_at() failed");
+ return;
+ }
+
+ TEST(name_to_handle_at(AT_FDCWD, TEST_FILE, at_fhp, &mount_id,
+ AT_EMPTY_PATH | AT_SYMLINK_FOLLOW));
+ if (TST_RET) {
+ tst_res(TFAIL | TTERRNO, "name_to_handle_at() failed");
+ return;
+ }
}
static void run(unsigned int n)
{
struct tcase *tc = &tcases[n];
struct stat file_stat;
- int fd, mount_id;
-
- TEST(name_to_handle_at(*tc->dfd, tc->pathname, fhp, &mount_id,
- tc->name_flags));
- if (TST_RET) {
- tst_res(TFAIL | TTERRNO, "name_to_handle_at() failed (%d)", n);
- return;
- }
+ int fd;
- TEST(fd = open_by_handle_at(*tc->dfd, fhp, tc->flags));
+ TEST(fd = open_by_handle_at(*tc->dfd, *tc->fhp, tc->flags));
if (fd < 0) {
tst_res(TFAIL | TTERRNO, "open_by_handle_at() failed (%d)", n);
return;
@@ -97,7 +96,7 @@ static void run(unsigned int n)
SAFE_FSTAT(fd, &file_stat);
/* Don't check stats when pathname is empty */
- if (file_stat.st_size == 0 || !tc->pathname[0])
+ if (file_stat.st_size == 0 || (tc->fhp == &f_fhp))
tst_res(TPASS, "open_by_handle_at() passed (%d)", n);
else
tst_res(TFAIL, "fstat() didn't work as expected (%d)", n);
--
2.25.0.rc1.19.g042ed3e048af
More information about the ltp
mailing list