From owner-freebsd-current Fri Feb 1 17: 5:26 2002 Delivered-To: freebsd-current@freebsd.org Received: from elvis.mu.org (elvis.mu.org [192.203.228.196]) by hub.freebsd.org (Postfix) with ESMTP id 8328737B41E for ; Fri, 1 Feb 2002 17:05:09 -0800 (PST) Received: by elvis.mu.org (Postfix, from userid 1192) id 47BD410DDFC; Fri, 1 Feb 2002 17:05:09 -0800 (PST) Date: Fri, 1 Feb 2002 17:05:09 -0800 From: Alfred Perlstein To: Terry Lambert Cc: Bruce Evans , current@freebsd.org Subject: Re: lock reversal in fdalloc() Message-ID: <20020201170509.E10817@elvis.mu.org> References: <20020202072516.J290-100000@gamplex.bde.org> <3C5B3A94.6B12B9D0@mindspring.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <3C5B3A94.6B12B9D0@mindspring.com>; from tlambert2@mindspring.com on Fri, Feb 01, 2002 at 05:02:12PM -0800 Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG * Terry Lambert [020201 17:02] wrote: > Bruce Evans wrote: > > > basically it seems to get pissy if it doesn't get the file slot it asks > > > for, so if another thread wins the race here, we'll panic. this problem > > > seems to also exist for 4.x and previous versions of freebsd. > > > > > > I'd like to get this fixed. Any suggestions? I think simply > > > removing the assertion should remove this hazzard, correct? > > I think if you delayed the allocation, it'd be OK, but I don't > see a clean way to do it without a bit of work. > > > Something like that. This was apparently missed when the retry loop was > > added. Lite2 has the panic but not the retry loop. > > > > BTW, the retry loop also picks up changes to the limit on descriptors. > > In fdalloc(), the corresponding limit is treated as a loop invariant, > > but it is not invariant. I think the process's rlimit can't change, > > but maxfilesperproc can change even if the process doesn't block, since > > it is not protected by FILEDESC_LOCK() :-(. Fortunately, the > > maxfilesperproc limit isn't very important. > > I think this is a requirement. > > The problem is the case where the maxfilesperproc has *not* > changed, and some other thread wins the race to the last one, > you have to honor that, and fail the current attempt. > > Retries are fugly. 8-(. There's a bunch of bogosity in the ordering of allocation of slots in the filedesc versus filling out the struct file and insertion into the list that I need to work out. I should be able to take a swipe at it in a couple of weeks hopefully. -- -Alfred Perlstein [alfred@freebsd.org] 'Instead of asking why a piece of software is using "1970s technology," start asking why software is ignoring 30 years of accumulated wisdom.' Tax deductable donations for FreeBSD: http://www.freebsdfoundation.org/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message