Module Name: src
Committed By: hannken
Date: Fri Feb 17 08:25:15 UTC 2017
Modified Files:
src/sys/kern: vfs_subr.c vfs_trans.c
Log Message:
Let syncer try fstrans_start() before running VFS_SYNC() to get rid
of the syncer lock/unlock from vfs_suspend().
To generate a diff of this commit:
cvs rdiff -u -r1.459 -r1.460 src/sys/kern/vfs_subr.c
cvs rdiff -u -r1.35 -r1.36 src/sys/kern/vfs_trans.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/kern/vfs_subr.c
diff -u src/sys/kern/vfs_subr.c:1.459 src/sys/kern/vfs_subr.c:1.460
--- src/sys/kern/vfs_subr.c:1.459 Wed Jan 11 14:52:02 2017
+++ src/sys/kern/vfs_subr.c Fri Feb 17 08:25:15 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_subr.c,v 1.459 2017/01/11 14:52:02 hannken Exp $ */
+/* $NetBSD: vfs_subr.c,v 1.460 2017/02/17 08:25:15 hannken Exp $ */
/*-
* Copyright (c) 1997, 1998, 2004, 2005, 2007, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.459 2017/01/11 14:52:02 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.460 2017/02/17 08:25:15 hannken Exp $");
#ifdef _KERNEL_OPT
#include "opt_ddb.h"
@@ -83,6 +83,7 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v
#include <sys/filedesc.h>
#include <sys/kernel.h>
#include <sys/mount.h>
+#include <sys/fstrans.h>
#include <sys/vnode_impl.h>
#include <sys/stat.h>
#include <sys/sysctl.h>
@@ -782,7 +783,10 @@ sched_sync(void *arg)
mp->mnt_synclist_slot = sync_delay_slot(sync_delay(mp));
if (vfs_busy(mp, &nmp))
continue;
- VFS_SYNC(mp, MNT_LAZY, curlwp->l_cred);
+ if (fstrans_start_nowait(mp, FSTRANS_SHARED) == 0) {
+ VFS_SYNC(mp, MNT_LAZY, curlwp->l_cred);
+ fstrans_done(mp);
+ }
vfs_unbusy(mp, false, &nmp);
}
mutex_exit(&mountlist_lock);
Index: src/sys/kern/vfs_trans.c
diff -u src/sys/kern/vfs_trans.c:1.35 src/sys/kern/vfs_trans.c:1.36
--- src/sys/kern/vfs_trans.c:1.35 Fri Feb 17 08:24:07 2017
+++ src/sys/kern/vfs_trans.c Fri Feb 17 08:25:15 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_trans.c,v 1.35 2017/02/17 08:24:07 hannken Exp $ */
+/* $NetBSD: vfs_trans.c,v 1.36 2017/02/17 08:25:15 hannken Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_trans.c,v 1.35 2017/02/17 08:24:07 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_trans.c,v 1.36 2017/02/17 08:25:15 hannken Exp $");
/*
* File system transaction operations.
@@ -506,11 +506,8 @@ vfs_suspend(struct mount *mp, int nowait
} else
mutex_enter(&vfs_suspend_lock);
- mutex_enter(&syncer_mutex);
- if ((error = VFS_SUSPENDCTL(mp, SUSPEND_SUSPEND)) != 0) {
- mutex_exit(&syncer_mutex);
+ if ((error = VFS_SUSPENDCTL(mp, SUSPEND_SUSPEND)) != 0)
mutex_exit(&vfs_suspend_lock);
- }
return error;
}
@@ -523,7 +520,6 @@ vfs_resume(struct mount *mp)
{
VFS_SUSPENDCTL(mp, SUSPEND_RESUME);
- mutex_exit(&syncer_mutex);
mutex_exit(&vfs_suspend_lock);
}