Only call bwillwrite() for regular file write()s, instead of for all write()s.
authorMatthew Dillon <dillon@dragonflybsd.org>
Mon, 5 May 2008 22:09:44 +0000 (22:09 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Mon, 5 May 2008 22:09:44 +0000 (22:09 +0000)
This stops hicuping on things like pty's and sockets during heavy file
activity.

sys/kern/sys_generic.c
sys/kern/vfs_vnops.c

index f520754..af8b687 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)sys_generic.c       8.5 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/kern/sys_generic.c,v 1.55.2.10 2001/03/17 10:39:32 peter Exp $
- * $DragonFly: src/sys/kern/sys_generic.c,v 1.48 2008/04/14 12:01:50 dillon Exp $
+ * $DragonFly: src/sys/kern/sys_generic.c,v 1.49 2008/05/05 22:09:44 dillon Exp $
  */
 
 #include "opt_ktrace.h"
@@ -485,8 +485,6 @@ dofilewrite(int fd, struct file *fp, struct uio *auio, int flags, int *res)
        }
 #endif
        len = auio->uio_resid;
-       if (fp->f_type == DTYPE_VNODE)
-               bwillwrite();
        error = fo_write(fp, auio, fp->f_cred, flags);
        if (error) {
                if (auio->uio_resid != len && (error == ERESTART ||
index 7de52e1..10587df 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)vfs_vnops.c 8.2 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/kern/vfs_vnops.c,v 1.87.2.13 2002/12/29 18:19:53 dillon Exp $
- * $DragonFly: src/sys/kern/vfs_vnops.c,v 1.54 2007/11/02 19:52:25 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_vnops.c,v 1.55 2008/05/05 22:09:44 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -666,7 +666,7 @@ vn_write(struct file *fp, struct uio *uio, struct ucred *cred, int flags)
        KASSERT(uio->uio_td == curthread,
                ("uio_td %p is not p %p", uio->uio_td, curthread));
        vp = (struct vnode *)fp->f_data;
-       if (vp->v_type == VREG)
+       if (vp->v_type == VREG || vp->v_type == VDATABASE)
                bwillwrite();
        vp = (struct vnode *)fp->f_data;        /* XXX needed? */