003 File Manager
Current Path:
/usr/src/contrib/netbsd-tests/fs/tmpfs
usr
/
src
/
contrib
/
netbsd-tests
/
fs
/
tmpfs
/
📁
..
📄
README
(891 B)
📄
h_funcs.subr
(3.39 KB)
📄
h_tools.c
(7.28 KB)
📄
t_create.sh
(3.93 KB)
📄
t_devices.sh
(2.21 KB)
📄
t_dots.sh
(2.35 KB)
📄
t_exec.sh
(2.04 KB)
📄
t_link.sh
(4.8 KB)
📄
t_mkdir.sh
(4.81 KB)
📄
t_mknod.sh
(3.85 KB)
📄
t_mount.sh
(4.51 KB)
📄
t_pipes.sh
(1.88 KB)
📄
t_read_write.sh
(2.93 KB)
📄
t_readdir.sh
(3.48 KB)
📄
t_remove.sh
(3.52 KB)
📄
t_rename.sh
(8.56 KB)
📄
t_renamerace.c
(2.21 KB)
📄
t_rmdir.sh
(5.62 KB)
📄
t_setattr.sh
(5.87 KB)
📄
t_sizes.sh
(4.31 KB)
📄
t_sockets.sh
(1.99 KB)
📄
t_statvfs.sh
(2.33 KB)
📄
t_symlink.sh
(3.56 KB)
📄
t_times.sh
(4.89 KB)
📄
t_trail_slash.sh
(2.02 KB)
📄
t_truncate.sh
(2.16 KB)
📄
t_vnd.sh
(3.26 KB)
📄
t_vnode_leak.sh
(2.47 KB)
Editing: t_renamerace.c
/* $NetBSD: t_renamerace.c,v 1.14 2017/01/13 21:30:40 christos Exp $ */ /* * Modified for rump and atf from a program supplied * by Nicolas Joly in kern/40948 */ #include <sys/types.h> #include <sys/mount.h> #include <sys/utsname.h> #include <atf-c.h> #include <errno.h> #include <fcntl.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <rump/rump.h> #include <rump/rump_syscalls.h> #include <fs/tmpfs/tmpfs_args.h> #include "h_macros.h" ATF_TC(renamerace2); ATF_TC_HEAD(renamerace2, tc) { atf_tc_set_md_var(tc, "descr", "rename(2) lock order inversion"); atf_tc_set_md_var(tc, "timeout", "6"); } static volatile int quittingtime = 0; static pid_t wrkpid; static void * r2w1(void *arg) { int fd; rump_pub_lwproc_newlwp(wrkpid); fd = rump_sys_open("/file", O_CREAT | O_RDWR, 0777); if (fd == -1) atf_tc_fail_errno("creat"); rump_sys_close(fd); while (!quittingtime) { if (rump_sys_rename("/file", "/dir/file") == -1) atf_tc_fail_errno("rename 1"); if (rump_sys_rename("/dir/file", "/file") == -1) atf_tc_fail_errno("rename 2"); } return NULL; } static void * r2w2(void *arg) { int fd; rump_pub_lwproc_newlwp(wrkpid); while (!quittingtime) { fd = rump_sys_open("/dir/file1", O_RDWR); if (fd != -1) rump_sys_close(fd); } return NULL; } ATF_TC_BODY(renamerace2, tc) { struct tmpfs_args args; pthread_t pt[2]; /* * Force SMP regardless of how many host CPUs there are. * Deadlock is highly unlikely to trigger otherwise. */ setenv("RUMP_NCPU", "2", 1); rump_init(); memset(&args, 0, sizeof(args)); args.ta_version = TMPFS_ARGS_VERSION; args.ta_root_mode = 0777; if (rump_sys_mount(MOUNT_TMPFS, "/", 0, &args, sizeof(args)) == -1) atf_tc_fail_errno("could not mount tmpfs"); if (rump_sys_mkdir("/dir", 0777) == -1) atf_tc_fail_errno("cannot create directory"); RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); RL(wrkpid = rump_sys_getpid()); pthread_create(&pt[0], NULL, r2w1, NULL); pthread_create(&pt[1], NULL, r2w2, NULL); /* usually triggers in <<1s for me */ sleep(4); quittingtime = 1; pthread_join(pt[0], NULL); pthread_join(pt[1], NULL); } ATF_TP_ADD_TCS(tp) { ATF_TP_ADD_TC(tp, renamerace2); return atf_no_error(); }
Upload File
Create Folder