summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2012-06-03 16:19:37 +0000
committerkib <kib@FreeBSD.org>2012-06-03 16:19:37 +0000
commit472101ae888fef815b6f37bfc5c1651d953264c0 (patch)
treece77e56578a1e669498da83f7102842dc6580883
parentd977144831363366367c6984849c566bbe98e00b (diff)
downloadFreeBSD-src-472101ae888fef815b6f37bfc5c1651d953264c0.zip
FreeBSD-src-472101ae888fef815b6f37bfc5c1651d953264c0.tar.gz
Add a knob to disable vn_io_fault.
MFC after: 1 month
-rw-r--r--sys/kern/vfs_vnops.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index d5a6bf1..00da3b4 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -697,6 +697,9 @@ unlock:
}
static const int io_hold_cnt = 16;
+static int vn_io_fault_enable = 1;
+SYSCTL_INT(_debug, OID_AUTO, vn_io_fault_enable, CTLFLAG_RW,
+ &vn_io_fault_enable, 0, "Enable vn_io_fault lock avoidance");
static unsigned long vn_io_faults_cnt;
SYSCTL_LONG(_debug, OID_AUTO, vn_io_faults, CTLFLAG_RD,
&vn_io_faults_cnt, 0, "Count of vn_io_fault lock avoidance triggers");
@@ -759,7 +762,8 @@ vn_io_fault(struct file *fp, struct uio *uio, struct ucred *active_cred,
vp = fp->f_vnode;
if (uio->uio_segflg != UIO_USERSPACE || vp->v_type != VREG ||
((mp = vp->v_mount) != NULL &&
- (mp->mnt_kern_flag & MNTK_NO_IOPF) == 0))
+ (mp->mnt_kern_flag & MNTK_NO_IOPF) == 0) ||
+ !vn_io_fault_enable)
return (doio(fp, uio, active_cred, flags, td));
/*
OpenPOWER on IntegriCloud