From owner-freebsd-hackers Sun Nov 26 23:21:21 2000 Delivered-To: freebsd-hackers@freebsd.org Received: from fw.wintelcom.net (ns1.wintelcom.net [209.1.153.20]) by hub.freebsd.org (Postfix) with ESMTP id 4B54737B479; Sun, 26 Nov 2000 23:21:18 -0800 (PST) Received: (from bright@localhost) by fw.wintelcom.net (8.10.0/8.10.0) id eAR7LHR21429; Sun, 26 Nov 2000 23:21:17 -0800 (PST) Date: Sun, 26 Nov 2000 23:21:17 -0800 From: Alfred Perlstein To: dillon@freebsd.org Cc: hackers@freebsd.org Subject: bwillwrite() not right. Message-ID: <20001126232117.C8051@fw.wintelcom.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG bwillwrite() is called in kern/sys_generic.c:dofilewrite() bwillwrite() is meant as a quick stop before doing any vnode ops to flush dirty buffers to prevent a deadlock. However: 1) afaik only VNODES have backing buffers, so stalling socket/pipes doesn't gain us anything 2) writev() doesn't call bwillwrite() shouldn't the code be changed like so: Index: sys_generic.c =================================================================== RCS file: /home/ncvs/src/sys/kern/sys_generic.c,v retrieving revision 1.65 diff -u -r1.65 sys_generic.c --- sys_generic.c 2000/11/21 20:22:34 1.65 +++ sys_generic.c 2000/11/27 07:18:48 @@ -403,7 +403,8 @@ } #endif cnt = nbyte; - bwillwrite(); + if (fp->f_type == DTYPE_VNODE) + bwillwrite(); if ((error = fo_write(fp, &auio, fp->f_cred, flags, p))) { if (auio.uio_resid != cnt && (error == ERESTART || error == EINTR || error == EWOULDBLOCK)) @@ -495,6 +496,8 @@ } #endif cnt = auio.uio_resid; + if (fp->f_type == DTYPE_VNODE) + bwillwrite(); if ((error = fo_write(fp, &auio, fp->f_cred, 0, p))) { if (auio.uio_resid != cnt && (error == ERESTART || error == EINTR || error == EWOULDBLOCK)) thanks, -- -Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org] "I have the heart of a child; I keep it in a jar on my desk." To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message