tools/testing/selftests/tmpfs/bug-link-o-tmpfile.c

Source file repositories/reference/linux-study-clean/tools/testing/selftests/tmpfs/bug-link-o-tmpfile.c

File Facts

System
Linux kernel
Corpus path
tools/testing/selftests/tmpfs/bug-link-o-tmpfile.c
Extension
.c
Size
2494 bytes
Lines
79
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: implementation source
Status
source implementation candidate

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

if (errno == ENOSYS || errno == EPERM) {
			ksft_exit_skip("unshare() error: unshare, errno %d\n", errno);
		} else {
			ksft_exit_fail_msg("unshare() error: unshare, errno %d\n", errno);
		}
	}

	if (mount(NULL, "/", NULL, MS_PRIVATE|MS_REC, NULL) == -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) {
		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) {
		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) {
		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) {
		ksft_exit_fail_msg("openat() error: Opening the second temporary file: Fail %d\n", errno);
	}
	ksft_test_result_pass(" ");
	ksft_exit_pass();
	return 0;
}

Annotation

Implementation Notes