From owner-freebsd-hackers Tue Nov 14 10:01:05 1995 Return-Path: owner-hackers Received: (from root@localhost) by freefall.freebsd.org (8.6.12/8.6.6) id KAA27372 for hackers-outgoing; Tue, 14 Nov 1995 10:01:05 -0800 Received: from phaeton.artisoft.com (phaeton.Artisoft.COM [198.17.250.211]) by freefall.freebsd.org (8.6.12/8.6.6) with ESMTP id KAA27355 for ; Tue, 14 Nov 1995 10:00:53 -0800 Received: (from terry@localhost) by phaeton.artisoft.com (8.6.11/8.6.9) id KAA20340; Tue, 14 Nov 1995 10:46:47 -0700 From: Terry Lambert Message-Id: <199511141746.KAA20340@phaeton.artisoft.com> Subject: Re: Odd crash after inode depletion.. To: davidg@root.com Date: Tue, 14 Nov 1995 10:46:47 -0700 (MST) Cc: terry@lambert.org, rashid@rk.ios.com, jgreco@brasil.moneng.mei.com, hackers@freebsd.org In-Reply-To: <199511141725.JAA00436@corbin.Root.COM> from "David Greenman" at Nov 14, 95 09:25:44 am X-Mailer: ELM [version 2.4 PL24] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Length: 2392 Sender: owner-hackers@freebsd.org Precedence: bulk > Do you know the difference of appearance of a cicular queue in our sources? > Based on your comments, I must conclude that you do not. tailq's are NOT > circular queues. The vnode free list is NOT a circular queue and it never has > been in FreeBSD. First of all, I correctly identified the code that was screwing up from a written description of the problem. I wrote the part about the circular queues before going to the code (I was going to not attempt a cursor fix precisely because it doesn't matter what I post, I get attacked). Second, it was a change to the queue management that cause the screwup, since even you must admit that it didn't happen in the past, and the change was to add more vnodes, and the failure mode was in the queue head check that guards the allocation code. Third, I identified two potential quick hack fixes. > The change to a circular queue for the mountlist was NOT made for aesthetic > reasons. It was made because it is required to traverse the mount queue in the > reverse direction in order to properly dismount filesystems (because of mount > point dependencies). This is why god invented the stack and function recursion. It's called a depth first traversal. > You can only do this by using circleq's. Like hell. It's *convenient* to use a circular queue. Since mounting and unmounting are less typical than getdents(), and system shutdown is less typical than either, there's no good reason, other than aesthetics, to make a change. Unless you happen to fix the file systems that would require the change. > Look Terry, I'm not the only one who is getting very annoyed at your > continuous spread of mis-truths and baseless criticisms. You would be doing > yourself and everyone else a favor if you would double check your facts and > assumptions first and stop making such completely wrong comments. I couldn't give less of a damn if the actual description lacked your high standards of descriptive accuracy. I correctly identified the problem as that of pulling a vnode with a positive count off the freelist head. It's the code that counts. Feel free to provide your own patch to fix this long standing bug, as you have been free to do since it was first reported. Regards, Terry Lambert terry@lambert.org --- Any opinions in this posting are my own and not those of my present or previous employers.