Module Name: src Committed By: pooka Date: Thu Aug 26 15:07:16 UTC 2010
Modified Files: src/tests/fs/common: fstest_nfs.c src/tests/fs/vfs: t_renamerace.c Log Message: Put the workaround for PR kern/43799 into the common nfs unmount routine. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/tests/fs/common/fstest_nfs.c cvs rdiff -u -r1.9 -r1.10 src/tests/fs/vfs/t_renamerace.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/common/fstest_nfs.c diff -u src/tests/fs/common/fstest_nfs.c:1.3 src/tests/fs/common/fstest_nfs.c:1.4 --- src/tests/fs/common/fstest_nfs.c:1.3 Fri Jul 30 16:15:05 2010 +++ src/tests/fs/common/fstest_nfs.c Thu Aug 26 15:07:16 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: fstest_nfs.c,v 1.3 2010/07/30 16:15:05 pooka Exp $ */ +/* $NetBSD: fstest_nfs.c,v 1.4 2010/08/26 15:07:16 pooka Exp $ */ /* * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -196,11 +196,26 @@ nfs_fstest_unmount(const atf_tc_t *tc, const char *path, int flags) { struct nfstestargs *args = theargs; - int status; + int status, i, sverrno; - if (rump_sys_unmount(path, flags) == -1) { - return errno; + /* + * NFS handles sillyrenames in an workqueue. Some of them might + * be still in the queue even if all user activity has ceased. + * We try to unmount for 2 seconds to give them a chance + * to flush out. + * + * PR kern/43799 + */ + for (i = 0; i < 20; i++) { + if ((status = rump_sys_unmount(path, flags)) == 0) + break; + sverrno = errno; + if (sverrno != EBUSY) + break; + usleep(100000); } + if (status == -1) + return sverrno; /* * It's highly expected that the child will die next, so we Index: src/tests/fs/vfs/t_renamerace.c diff -u src/tests/fs/vfs/t_renamerace.c:1.9 src/tests/fs/vfs/t_renamerace.c:1.10 --- src/tests/fs/vfs/t_renamerace.c:1.9 Wed Aug 25 18:11:20 2010 +++ src/tests/fs/vfs/t_renamerace.c Thu Aug 26 15:07:16 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: t_renamerace.c,v 1.9 2010/08/25 18:11:20 pooka Exp $ */ +/* $NetBSD: t_renamerace.c,v 1.10 2010/08/26 15:07:16 pooka Exp $ */ /* * Modified for rump and atf from a program supplied @@ -115,14 +115,6 @@ */ if (FSTYPE_LFS(tc)) abort(); - - /* - * NFS sillyrename is broken and may linger on in the file system. - * This sleep lets them finish so we don't get transient unmount - * failures. - */ - if (FSTYPE_NFS(tc)) - sleep(1); } static void