cvs commit: src/sys/nfsclient nfs_bio.c nfs_vfsops.c nfsargs.h nfsmount.h src/sys/sys buf.h bufobj.h src/sys/kern vfs_bio.c

Alfred Perlstein alfred at freebsd.org
Sun Jun 12 10:07:08 GMT 2005


* Brian Fundakowski Feldman <green at freebsd.org> [050612 01:26] wrote:
> On Sun, Jun 12, 2005 at 01:08:33AM -0700, Alfred Perlstein wrote:
> > 
> > Seriously, have you tested what happens to a libc_r app that
> > opens an nfs file F_SYNC?  My guess is that it's not pretty.
> 
> This code path is related to O_NONBLOCK, not O_FSYNC.  O_FSYNC is
> synonymous with the slow fallback path that large transactional block
> now takes, rather than deadlocking.  O_NONBLOCK really means that
> whatever they do, they are required to check for EAGAIN.

To make it perfectly clear.

If an application linked against libc_r opens a file with O_FSYNC.
Libc_r will set O_NONBLOCK (it does so for each open(2))
A write on that descriptor will return EAGAIN (to libc_r)
Libc_r will then attempt to select(2) on this decriptor, which
  will return "ready" (as do all select(2)'s on disk files)

The question is:

Will Libc_r then busy spin? 

If so, how many other apps might get screwed just sometimes (over
nfs) because only _half_ of this "solution" is implemented?

Or is my thinking on this wrong?

-- 
- Alfred Perlstein
- email: bright at mu.org cell: 408-480-4684


More information about the cvs-src mailing list