Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Nov 2000 23:21:17 -0800
From:      Alfred Perlstein <bright@wintelcom.net>
To:        dillon@freebsd.org
Cc:        hackers@freebsd.org
Subject:   bwillwrite() not right.
Message-ID:  <20001126232117.C8051@fw.wintelcom.net>

next in thread | raw e-mail | index | archive | help
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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001126232117.C8051>