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();
 }

Reply via email to