From c5fa8d1a2cdbbdd194786e5e9a207fdfcb6a35a5 Mon Sep 17 00:00:00 2001 From: Peter Wemm Date: Sat, 1 Aug 1998 09:04:02 +0000 Subject: [PATCH] If we get an ENOBUFS from the network, it's normally transient network interface congestion (eg: nfs over a ppp link, etc). Don't log these for UDP mounts, and don't cause syscalls to fail with EINTR. This stops the 'nfs send error 55' warnings. If the error is because the system is really hosed, this is the least of your problems... --- sys/nfs/nfs_socket.c | 12 +++++++++++- sys/nfsclient/nfs_socket.c | 12 +++++++++++- sys/nfsserver/nfs_srvsock.c | 12 +++++++++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/sys/nfs/nfs_socket.c b/sys/nfs/nfs_socket.c index ede6386a95c..d4e1a049203 100644 --- a/sys/nfs/nfs_socket.c +++ b/sys/nfs/nfs_socket.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_socket.c 8.5 (Berkeley) 3/30/95 - * $Id: nfs_socket.c,v 1.41 1998/06/07 17:12:28 dfr Exp $ + * $Id: nfs_socket.c,v 1.42 1998/07/15 02:32:24 bde Exp $ */ /* @@ -432,6 +432,16 @@ nfs_send(so, nam, top, rep) error = so->so_proto->pr_usrreqs->pru_sosend(so, sendnam, 0, top, 0, flags, curproc /*XXX*/); + /* + * ENOBUFS for dgram sockets is transient and non fatal. + * No need to log, and no need to break a soft mount. + */ + if (error == ENOBUFS && so->so_type == SOCK_DGRAM) { + error = 0; + if (rep) /* do backoff retransmit on client */ + rep->r_flags |= R_MUSTRESEND; + } + if (error) { if (rep) { log(LOG_INFO, "nfs send error %d for server %s\n",error, diff --git a/sys/nfsclient/nfs_socket.c b/sys/nfsclient/nfs_socket.c index ede6386a95c..d4e1a049203 100644 --- a/sys/nfsclient/nfs_socket.c +++ b/sys/nfsclient/nfs_socket.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_socket.c 8.5 (Berkeley) 3/30/95 - * $Id: nfs_socket.c,v 1.41 1998/06/07 17:12:28 dfr Exp $ + * $Id: nfs_socket.c,v 1.42 1998/07/15 02:32:24 bde Exp $ */ /* @@ -432,6 +432,16 @@ nfs_send(so, nam, top, rep) error = so->so_proto->pr_usrreqs->pru_sosend(so, sendnam, 0, top, 0, flags, curproc /*XXX*/); + /* + * ENOBUFS for dgram sockets is transient and non fatal. + * No need to log, and no need to break a soft mount. + */ + if (error == ENOBUFS && so->so_type == SOCK_DGRAM) { + error = 0; + if (rep) /* do backoff retransmit on client */ + rep->r_flags |= R_MUSTRESEND; + } + if (error) { if (rep) { log(LOG_INFO, "nfs send error %d for server %s\n",error, diff --git a/sys/nfsserver/nfs_srvsock.c b/sys/nfsserver/nfs_srvsock.c index ede6386a95c..d4e1a049203 100644 --- a/sys/nfsserver/nfs_srvsock.c +++ b/sys/nfsserver/nfs_srvsock.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_socket.c 8.5 (Berkeley) 3/30/95 - * $Id: nfs_socket.c,v 1.41 1998/06/07 17:12:28 dfr Exp $ + * $Id: nfs_socket.c,v 1.42 1998/07/15 02:32:24 bde Exp $ */ /* @@ -432,6 +432,16 @@ nfs_send(so, nam, top, rep) error = so->so_proto->pr_usrreqs->pru_sosend(so, sendnam, 0, top, 0, flags, curproc /*XXX*/); + /* + * ENOBUFS for dgram sockets is transient and non fatal. + * No need to log, and no need to break a soft mount. + */ + if (error == ENOBUFS && so->so_type == SOCK_DGRAM) { + error = 0; + if (rep) /* do backoff retransmit on client */ + rep->r_flags |= R_MUSTRESEND; + } + if (error) { if (rep) { log(LOG_INFO, "nfs send error %d for server %s\n",error,