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