final decision about *at syscalls

Alfred Perlstein alfred at freebsd.org
Wed Apr 16 17:03:42 UTC 2008


* Pawel Jakub Dawidek <pjd at FreeBSD.org> [080416 09:56] wrote:
> On Wed, Apr 16, 2008 at 10:14:40AM -0400, John Baldwin wrote:
> > On Saturday 12 April 2008 07:20:19 am Pawel Jakub Dawidek wrote:
> > > From what you write John, #1 is a better choice than #2. If you want to
> > > avoid races, you can pass already locked vnode. In case of file
> > > descriptors, if p_fd is not locked another thread can close and open
> > > different directory under the same descriptor number.
> > 
> > Did you read Robert's paper?  Do you not realize that the kernel copying data 
> > in from userland multiple times and having it change in between is very bug 
> > prone?
> 
> Believe me I'm fully aware of the problems Robert described in his
> paper. With vnode approach where do you have more data copying between
> kernel and userland?
> 
> File descriptor proposal works like this:
> 
> userland
> 	openat(fd, path)
> kernel
> 	NDINIT_AT(&vp, path, fd);
> 	/* operate on vp */
> 
> Vnode proposal works this way:
> 
> userland
> 	openat(fd, path)
> kernel
> 	dvp = file_descriptor_to_vnode(fd);
> 	NDINIT_AT(&vp, path, dvp);
> 	/* operate on vp */

My first impression is that passing fp to vp code is a layering
violation and bad news.  I need to think about it more.


-- 
- Alfred Perlstein


More information about the freebsd-arch mailing list