Date: Sat, 25 Oct 1997 01:50:02 -0700 (PDT) From: Matt Dillon <dillon@best.net> To: freebsd-bugs Subject: Re: kern/4844: VM lookup, endless loop in vm_map_lookup_entry() Message-ID: <199710250850.BAA23109@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/4844; it has been noted by GNATS. From: Matt Dillon <dillon@best.net> To: Bruce Evans <bde@zeta.org.au> Cc: FreeBSD-gnats-submit@FreeBSD.ORG Subject: Re: kern/4844: VM lookup, endless loop in vm_map_lookup_entry() Date: Sat, 25 Oct 1997 01:42:18 -0700 (PDT) :> Both machines locked up in vm_map_lookup_entry() while trying :> to brelse/bfreekva/vm_map_delete (see below). One locked up :> from a SCSI interrupt doing the above sequence, the other locked :> up from system call. : :brelse/bfreekva have some problems. See PR4630, especially the followups. : :Bruce Assuming getnewbuf() isn't called from an interrupt, I believe I have a working solution. I'm going to test it a bit more. If it works out, i'll send you the diffs. It's really simple, I add another bufqueues[] element called QUEUE_DEFERED. brelse() puts the bp on QUEUE_DEFERED rather then QUEUE_EMPTY and does not call bfreekva(). getnewbuf() then moves everything from QUEUE_DEFERED to QUEUE_EMPTY and calls bfreekva() on it. The code mods are minor, and even pretty clean. I have a question, though, brelse() makes a call to allocbuf(bp, 0) under certain conditions. Do I have to worry about this too? -Matt Matthew Dillon Engineering, BEST Internet Communications, Inc. <dillon@best.net> [always include a portion of the original email in any response!]
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199710250850.BAA23109>