Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Jun 2005 20:49:30 -0700
From:      Alfred Perlstein <alfred@freebsd.org>
To:        Brian Feldman <green@FreeBSD.org>
Cc:        cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: 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
Message-ID:  <20050611034930.GY17867@elvis.mu.org>
In-Reply-To: <200506102350.j5ANofFM008212@repoman.freebsd.org>
References:  <200506102350.j5ANofFM008212@repoman.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Returning EAGAIN from a disk IO seems bogus, are you sure it makes
sense to do that when IO_NDELAY is set?  Shouldn't it just be ignored
like other FSes do?

* Brian Feldman <green@FreeBSD.org> [050610 16:50] wrote:
> green       2005-06-10 23:50:41 UTC
> 
>   FreeBSD src repository
> 
>   Modified files:
>     sys/nfsclient        nfs_bio.c nfs_vfsops.c nfsargs.h 
>                          nfsmount.h 
>     sys/sys              buf.h bufobj.h 
>     sys/kern             vfs_bio.c 
>   Log:
>   Fix a serious deadlock with the NFS client.  Given a large enough
>   atomic write request, it can fill the buffer cache with the entirety
>   of that write in order to handle retries.  However, it never drops
>   the vnode lock, or else it wouldn't be atomic, so it ends up waiting
>   indefinitely for more buf memory that cannot be gotten as it has it
>   all, and it waits in an uncancellable state.
>   
>   To fix this, hibufspace is exported and scaled to a reasonable
>   fraction.  This is used as the limit of how much of an atomic write
>   request by the NFS client will be handled asynchronously.  If the
>   request is larger than this, it will be turned into a synchronous
>   request which won't deadlock the system.  It's possible this value is
>   far off from what is required by some, so it shall be tunable as soon
>   as mount_nfs(8) learns of the new field.
>   
>   The slowdown between an asynchronous and a synchronous write on NFS
>   appears to be on the order of 2x-4x.
>   
>   General nod by: gad
>   MFC after:      2 weeks
>   More testing:   wes
>   PR:             kern/79208
>   
>   Revision  Changes    Path
>   1.489     +1 -1      src/sys/kern/vfs_bio.c
>   1.151     +65 -0     src/sys/nfsclient/nfs_bio.c
>   1.177     +9 -0      src/sys/nfsclient/nfs_vfsops.c
>   1.68      +2 -2      src/sys/nfsclient/nfsargs.h
>   1.30      +1 -0      src/sys/nfsclient/nfsmount.h
>   1.186     +1 -0      src/sys/sys/buf.h
>   1.15      +2 -2      src/sys/sys/bufobj.h

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



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