Module Name: src Committed By: pooka Date: Thu Aug 12 09:34:16 UTC 2010
Modified Files: src/tests/fs/vfs: t_vfsops.c Log Message: Add test case for fhopenining a removed file. This fails on msdosfs and lfs and causes a kernel panic on nfs. I'll fix nfs soon and file a PR for the other two. Also panicked ffs a few hours ago, but was fixed by hannken. Needless to say, this test was inspired by his fix. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/tests/fs/vfs/t_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/fs/vfs/t_vfsops.c diff -u src/tests/fs/vfs/t_vfsops.c:1.4 src/tests/fs/vfs/t_vfsops.c:1.5 --- src/tests/fs/vfs/t_vfsops.c:1.4 Mon Jul 19 16:00:45 2010 +++ src/tests/fs/vfs/t_vfsops.c Thu Aug 12 09:34:16 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: t_vfsops.c,v 1.4 2010/07/19 16:00:45 pooka Exp $ */ +/* $NetBSD: t_vfsops.c,v 1.5 2010/08/12 09:34:16 pooka Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -126,10 +126,49 @@ rump_sys_close(fd); } +#define FNAME "a_file" +static void +tfhremove(const atf_tc_t *tc, const char *path) +{ + size_t fhsize; + void *fhp; + int fd; + + /* should repeat above, but ... */ + if (FSTYPE_TMPFS(tc)) + atf_tc_skip("file handles broken (PR kern/43605)"); + + RL(rump_sys_chdir(path)); + RL(fd = rump_sys_open(FNAME, O_RDWR | O_CREAT, 0777)); + RL(rump_sys_close(fd)); + + fhsize = 0; + if (rump_sys_getfh(FNAME, NULL, &fhsize) == -1) { + if (errno == EOPNOTSUPP) { + atf_tc_skip("file handles not supported"); + } else if (errno != E2BIG) { + atf_tc_fail_errno("getfh size"); + } + } + + fhp = malloc(fhsize); + RL(rump_sys_getfh(FNAME, fhp, &fhsize)); + RL(rump_sys_unlink(FNAME)); + + if (FSTYPE_MSDOS(tc) || FSTYPE_LFS(tc)) + atf_tc_expect_fail("fhopen() for removed file succeeds (PR coming soon)"); + ATF_REQUIRE_ERRNO(ESTALE, rump_sys_fhopen(fhp, fhsize, O_RDONLY) == -1); + atf_tc_expect_pass(); + + RL(rump_sys_chdir("/")); +} +#undef FNAME + ATF_TC_FSAPPLY(tmount, "mount/unmount"); ATF_TC_FSAPPLY(tstatvfs, "statvfs"); ATF_TC_FSAPPLY(tsync, "sync"); ATF_TC_FSAPPLY(tfilehandle, "file handles"); +ATF_TC_FSAPPLY(tfhremove, "fhtovp for removed file"); ATF_TP_ADD_TCS(tp) { @@ -138,6 +177,7 @@ ATF_TP_FSAPPLY(tstatvfs); ATF_TP_FSAPPLY(tsync); ATF_TP_FSAPPLY(tfilehandle); + ATF_TP_FSAPPLY(tfhremove); return atf_no_error(); }