Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 Jun 2012 11:38:07 +0200
From:      Mateusz Guzik <mjguzik@gmail.com>
To:        Pawel Jakub Dawidek <pjd@FreeBSD.org>
Cc:        svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org, davidxu@FreeBSD.org
Subject:   Re: svn commit: r236935 - head/sys/kern
Message-ID:  <20120613093807.GA3893@dft-labs.eu>
In-Reply-To: <20120612214400.GB1429@garage.freebsd.pl>
References:  <201206112205.q5BM5QIv013266@svn.freebsd.org> <4FD6FD39.5090800@gmail.com> <20120612104749.GB20749@dft-labs.eu> <20120612114335.GA1372@garage.freebsd.pl> <20120612134950.GC20749@dft-labs.eu> <20120612160128.GA1429@garage.freebsd.pl> <20120612191828.GD20749@dft-labs.eu> <20120612214400.GB1429@garage.freebsd.pl>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Jun 12, 2012 at 11:44:00PM +0200, Pawel Jakub Dawidek wrote:
> On Tue, Jun 12, 2012 at 09:18:28PM +0200, Mateusz Guzik wrote:
> > On Tue, Jun 12, 2012 at 06:01:29PM +0200, Pawel Jakub Dawidek wrote:
> > > Look good and you can just add 'In co-operation with: pjd'.
> > > One minor thing is that fd_first_free() can return 'size' if there are
> > > no free slots available. Could you include that in the comment as well?
> > > 
> > 
> > http://people.freebsd.org/~mjg/patches/fdalloc%2bfd_first_free2.patch
> 
> Ok. Merge racct_set() call into one line, it now fits into 80 chars.
> I have no more objections.
> 

This patch contains terrible brain-o:

if (fd >= fdp->fd_nfiles) {
	allocfd = 2 * max(fdp->fd_nfiles, fd);

allocfd is always 2 * fd, which I think is ok, just no reason to compare
again with fdp->fd_nfiles.

Also the patch can be simplified.

fdp xlock is held for whole duration of fdalloc.

Code:
fdgrowtable(fdp, min(allocfd, maxfd));
/* Retry... */
fd = fd_first_free(fdp, minfd, fdp->fd_nfiles);
if (fd >= maxfd)
	return (EMFILE);

fdgrowtable never fails and when we call it we know that new fd will fit
in the table. In case of no free entries fd_first_free returns size,
which coressponds to first newly allocated fd after growth. So fd after
table growth is already the first free descriptor that can be used and
would be returned by another call to fd_first_free.

To sum up:
http://people.freebsd.org/~mjg/patches/fdalloc%2bfd_first_free4.patch

Any comments?

Thanks,
-- 
Mateusz Guzik <mjguzik gmail.com>



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