Date: Fri, 15 Feb 2013 13:43:13 GMT From: Norbert Koch <nkoch@demig.de> To: freebsd-gnats-submit@FreeBSD.org Subject: kern/176169: system unresponsive for 1min after mounting flash read-only Message-ID: <201302151343.r1FDhDAQ018889@red.freebsd.org> Resent-Message-ID: <201302151350.r1FDo4GX010060@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 176169 >Category: kern >Synopsis: system unresponsive for 1min after mounting flash read-only >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Fri Feb 15 13:50:03 UTC 2013 >Closed-Date: >Last-Modified: >Originator: Norbert Koch >Release: FreeBSD 9.1 >Organization: >Environment: FreeBSD 9.1 RELEASE >Description: This problem has already been reported and fixed(?) in pfsense's bug tracking system by adding the sysctl vfs.forcesync. The author of the fix is Ermal Luçi ( http://redmine.pfsense.org/users/6 ). http://redmine.pfsense.org/projects/pfsense-tools/repository/revisions/008742971cb44d8c0f81929504ab7330442c4ba4/entry/patches/RELENG_8_3/vfs_subr_mount_RO.diff I tried this under FreeBSD 9.1 and it seems to work. mount -ow / ; time mount -orf / : 65s without patch With patch time is <1s. As I am no vfs expert I do not know what potential negative consequences this change may have. The original patch uses CTLFLAG_RD for forcesync. I do not see why this should not be CTLFLAG_RW. >How-To-Repeat: >Fix: diff -r 89885db951fb src/sys/kern/vfs_subr.c --- a/src/sys/kern/vfs_subr.c Mon Feb 04 14:45:48 2013 +0100 +++ b/src/sys/kern/vfs_subr.c Fri Feb 15 14:32:09 2013 +0100 @@ -121,6 +121,11 @@ SYSCTL_ULONG(_vfs, OID_AUTO, numvnodes, CTLFLAG_RD, &numvnodes, 0, "Number of vnodes in existence"); +static int forcesync; + +SYSCTL_INT(_vfs, OID_AUTO, forcesync, CTLFLAG_RW, &forcesync, 0, + "Do full checks when switching to RO mount of FS"); + /* * Conversion tables for conversion from vnode types to inode formats * and back. @@ -2581,6 +2586,7 @@ * vnodes open for writing. */ if (flags & WRITECLOSE) { + if (forcesync) { if (vp->v_object != NULL) { VM_OBJECT_LOCK(vp->v_object); vm_object_page_clean(vp->v_object, 0, 0, 0); @@ -2593,6 +2599,7 @@ MNT_VNODE_FOREACH_ALL_ABORT(mp, mvp); return (error); } + } error = VOP_GETATTR(vp, &vattr, td->td_ucred); VI_LOCK(vp); >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201302151343.r1FDhDAQ018889>