Commit 58beae25 authored by Shivam Chaudhary's avatar Shivam Chaudhary Committed by Shuah Khan
Browse files

selftests: tmpfs: Add kselftest support to tmpfs

Replace direct error handling with 'ksft_test_result_*'
macros for better reporting.

Test logs:

Before change:
- Without root
 error: unshare, errno 1

- With root
 No, output

After change:
- Without root
TAP version 13
1..1
ok 2 # SKIP This test needs root to run!
Totals: pass:0 fail:0 xfail:0 xpass:0 skip:1 error:0

- With root
TAP version 13
1..1
ok 1 Test : Success
Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0

Link: https://lore.kernel.org/r/20250105085255.124929-3-cvam0000@gmail.com


Signed-off-by: default avatarShivam Chaudhary <cvam0000@gmail.com>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
parent 41ca14ef
Loading
Loading
Loading
Loading
+14 −15
Original line number Diff line number Diff line
@@ -41,39 +41,38 @@ int main(void)

	if (unshare(CLONE_NEWNS) == -1) {
		if (errno == ENOSYS || errno == EPERM) {
			fprintf(stderr, "error: unshare, errno %d\n", errno);
			return 4;
			ksft_exit_skip("unshare() error: unshare, errno %d\n", errno);
		} else {
			ksft_exit_fail_msg("unshare() error: unshare, errno %d\n", errno);
		}
		fprintf(stderr, "error: unshare, errno %d\n", errno);
		return 1;
	}

	if (mount(NULL, "/", NULL, MS_PRIVATE|MS_REC, NULL) == -1) {
		fprintf(stderr, "error: mount '/', errno %d\n", errno);
		return 1;
		ksft_exit_fail_msg("mount() error: Root filesystem private mount: Fail %d\n", errno);
	}

	/* Our heroes: 1 root inode, 1 O_TMPFILE inode, 1 permanent inode. */
	if (mount(NULL, "/tmp", "tmpfs", 0, "nr_inodes=3") == -1) {
		fprintf(stderr, "error: mount tmpfs, errno %d\n", errno);
		return 1;
		ksft_exit_fail_msg("mount() error: Mounting tmpfs on /tmp: Fail %d\n", errno);
	}

	fd = openat(AT_FDCWD, "/tmp", O_WRONLY|O_TMPFILE, 0600);
	if (fd == -1) {
		fprintf(stderr, "error: open 1, errno %d\n", errno);
		return 1;
		ksft_exit_fail_msg("openat() error: Open first temporary file: Fail %d\n", errno);
	}

	if (linkat(fd, "", AT_FDCWD, "/tmp/1", AT_EMPTY_PATH) == -1) {
		fprintf(stderr, "error: linkat, errno %d\n", errno);
		return 1;
		ksft_exit_fail_msg("linkat() error: Linking the temporary file: Fail %d\n", errno);
		/* Ensure fd is closed on failure */
		close(fd);
	}
	close(fd);

	fd = openat(AT_FDCWD, "/tmp", O_WRONLY|O_TMPFILE, 0600);
	if (fd == -1) {
		fprintf(stderr, "error: open 2, errno %d\n", errno);
		return 1;
		ksft_exit_fail_msg("openat() error: Opening the second temporary file: Fail %d\n", errno);
	}

	ksft_test_result_pass(" ");
	ksft_exit_pass();
	return 0;
}