Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 21 Feb 1999 23:42:10 -0500 (EST)
From:      Luoqi Chen <luoqi@watermarkgroup.com>
To:        mjacob@feral.com
Cc:        dfr@nlsystems.com, freebsd-hackers@FreeBSD.ORG
Subject:   Re: Panic in FFS/4.0 as of yesterday - update
Message-ID:  <199902220442.XAA14152@lor.watermarkgroup.com>

next in thread | raw e-mail | index | archive | help
> > What troubled me here is why these supposedly async writes block (and ccd
> > is not involved)? I'd really like to see a dump of ps listing from ddb.
> 
The async writes blocked on "nfsrcvlk". It looked like the test program
writeit was trying to clean some dirty nfs bufs. This situation shouldn't
be fatal as it is impossible to avoid blocking during async writes, getnewbuf
should simply return a NULL. The following patch should do the trick.

-lq

Index: vfs_bio.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/vfs_bio.c,v
retrieving revision 1.199
diff -u -r1.199 vfs_bio.c
--- vfs_bio.c	1999/01/27 21:49:58	1.199
+++ vfs_bio.c	1999/02/22 04:19:06
@@ -993,6 +993,7 @@
 			    bp->b_qindex);
 #endif
 	}
+waitforany:
 	if (!bp) {
 		/* wait for a free buffer of any kind */
 		needsbuffer |= VFS_BIO_NEED_ANY;
@@ -1069,8 +1070,10 @@
 						bp = TAILQ_NEXT(bp, b_freelist);
 					}
 				}
-				if (bp == NULL)
-					panic("getnewbuf: cannot get buffer, infinite recursion failure");
+				if (bp == NULL) {
+					printf("getnewbuf: cannot get buffer, infinite recursion failure\n");
+					goto waitforany;
+				}
 			} else {
 				bremfree(bp);
 				bp->b_flags |= B_BUSY | B_AGE | B_ASYNC;


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?199902220442.XAA14152>