svn commit: r245476 - in head/sys: fs/nfs nfsclient
John Baldwin
jhb at FreeBSD.org
Tue Jan 15 22:08:18 UTC 2013
Author: jhb
Date: Tue Jan 15 22:08:17 2013
New Revision: 245476
URL: http://svnweb.freebsd.org/changeset/base/245476
Log:
- More properly handle interrupted NFS requests on an interruptible mount
by returning an error of EINTR rather than EACCES.
- While here, bring back some (but not all) of the NFS RPC statistics lost
when krpc was committed.
Reviewed by: rmacklem
MFC after: 1 week
Modified:
head/sys/fs/nfs/nfs_commonkrpc.c
head/sys/nfsclient/nfs_krpc.c
Modified: head/sys/fs/nfs/nfs_commonkrpc.c
==============================================================================
--- head/sys/fs/nfs/nfs_commonkrpc.c Tue Jan 15 22:08:03 2013 (r245475)
+++ head/sys/fs/nfs/nfs_commonkrpc.c Tue Jan 15 22:08:17 2013 (r245476)
@@ -767,12 +767,18 @@ tryagain:
if (stat == RPC_SUCCESS) {
error = 0;
} else if (stat == RPC_TIMEDOUT) {
+ NFSINCRGLOBAL(newnfsstats.rpctimeouts);
error = ETIMEDOUT;
} else if (stat == RPC_VERSMISMATCH) {
+ NFSINCRGLOBAL(newnfsstats.rpcinvalid);
error = EOPNOTSUPP;
} else if (stat == RPC_PROGVERSMISMATCH) {
+ NFSINCRGLOBAL(newnfsstats.rpcinvalid);
error = EPROTONOSUPPORT;
+ } else if (stat == RPC_INTR) {
+ error = EINTR;
} else {
+ NFSINCRGLOBAL(newnfsstats.rpcinvalid);
error = EACCES;
}
if (error) {
Modified: head/sys/nfsclient/nfs_krpc.c
==============================================================================
--- head/sys/nfsclient/nfs_krpc.c Tue Jan 15 22:08:03 2013 (r245475)
+++ head/sys/nfsclient/nfs_krpc.c Tue Jan 15 22:08:17 2013 (r245476)
@@ -549,14 +549,21 @@ tryagain:
*/
if (stat == RPC_SUCCESS)
error = 0;
- else if (stat == RPC_TIMEDOUT)
+ else if (stat == RPC_TIMEDOUT) {
+ nfsstats.rpctimeouts++;
error = ETIMEDOUT;
- else if (stat == RPC_VERSMISMATCH)
+ } else if (stat == RPC_VERSMISMATCH) {
+ nfsstats.rpcinvalid++;
error = EOPNOTSUPP;
- else if (stat == RPC_PROGVERSMISMATCH)
+ } else if (stat == RPC_PROGVERSMISMATCH) {
+ nfsstats.rpcinvalid++;
error = EPROTONOSUPPORT;
- else
+ } else if (stat == RPC_INTR) {
+ error = EINTR;
+ } else {
+ nfsstats.rpcinvalid++;
error = EACCES;
+ }
if (error)
goto nfsmout;
@@ -572,6 +579,7 @@ tryagain:
if (error == ENOMEM) {
m_freem(mrep);
AUTH_DESTROY(auth);
+ nfsstats.rpcinvalid++;
return (error);
}
More information about the svn-src-all
mailing list