Subject: Re: file descriptor races
To: =?iso-8859-1?Q?Jarom=EDr_Dolecek?= <jdolecek@netbsd.org>
From: Jason R Thorpe <thorpej@zembu.com>
List: tech-kern
Date: 06/06/2001 16:07:10
On Tue, Jun 05, 2001 at 12:16:57PM +0200, Jaromír Dolecek wrote:

 > FreeBSD seem to adopt something called fdrop(), which seems to drop
 > all references to given file. I'd much rather introduce something
 > like 'atomic falloc'. The proposed interface

fdrop() is not for that, at all.  fdrop() is sort of like our FILE_UNUSE(),
except they don't deal with the "no, the file descriptor is being closed"
case.

 > int
 > fallocm(struct proc *p, struct file *resultfp[], int resultfd[], int nelem)
 > 
 > i.e. the function gets passed 'struct file *' array and int array with size
 > of 'nelem', and would take care to allocate either nelem descriptors, 
 > or fail and not allocate either (i.e. free those allocated so far, before
 > it would return to caller). The most simple way to provide 'atomicity'
 > would be probably to introduce e.g. special FIF_NOTREADY flag,
 > which sys_dup(), sys_fcntl(), sys_read(), sys_readv(), sys_write(),
 > sys_writev(), sys_close() would check and return EBADF if it's set.
 > 
 > Or, optionally, we may use FIF_WANTCLOSE | FIF_NOTREADY, and only
 > change sys_close() to check for FIF_NOTREADY flag (the others
 > already check the FIF_WANTCLOSE flag).
 > 
 > Opinions?

Yah, this might not be a bad idea, though I prefer FIF_LARVAL to NOTREADY :-)

Since I'm already in this code up to my elbows, I'll work on it.

-- 
        -- Jason R. Thorpe <thorpej@zembu.com>