summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/nfs/nfs_subr.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/fs/nfs/nfs_subr.c')
-rw-r--r--usr/src/uts/common/fs/nfs/nfs_subr.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/usr/src/uts/common/fs/nfs/nfs_subr.c b/usr/src/uts/common/fs/nfs/nfs_subr.c
index 25397dd6e4..6477e27f25 100644
--- a/usr/src/uts/common/fs/nfs/nfs_subr.c
+++ b/usr/src/uts/common/fs/nfs/nfs_subr.c
@@ -290,6 +290,13 @@ extern ts_label_t *getflabel_cipso(vfs_t *);
*/
#define IS_RECOVERABLE_ERROR(error) !((error == EINTR) || (error == EIO))
+#ifdef DEBUG
+#define SRV_QFULL_MSG "send queue to NFS%d server %s is full; still trying\n"
+#define SRV_NOTRESP_MSG "NFS%d server %s not responding still trying\n"
+#else
+#define SRV_QFULL_MSG "send queue to NFS server %s is full still trying\n"
+#define SRV_NOTRESP_MSG "NFS server %s not responding still trying\n"
+#endif
/*
* Common handle get program for NFS, NFS ACL, and NFS AUTH client.
*/
@@ -928,7 +935,7 @@ rfscall(mntinfo_t *mi, rpcproc_t which, xdrproc_t xdrargs, caddr_t argsp,
struct chtab *ch;
cred_t *cr = icr;
enum clnt_stat status;
- struct rpc_err rpcerr;
+ struct rpc_err rpcerr, rpcerr_tmp;
struct timeval wait;
int timeo; /* in units of hz */
int my_rsize, my_wsize;
@@ -938,6 +945,7 @@ rfscall(mntinfo_t *mi, rpcproc_t which, xdrproc_t xdrargs, caddr_t argsp,
servinfo_t *svp;
struct nfs_clnt *nfscl;
zoneid_t zoneid = getzoneid();
+ char *msg;
#ifdef DEBUG
char *bufp;
#endif
@@ -1219,18 +1227,23 @@ failoverretry:
tryagain = TRUE;
timeo = backoff(timeo);
+
+ CLNT_GETERR(client, &rpcerr_tmp);
+ if ((status == RPC_CANTSEND) &&
+ (rpcerr_tmp.re_errno == ENOBUFS))
+ msg = SRV_QFULL_MSG;
+ else
+ msg = SRV_NOTRESP_MSG;
+
mutex_enter(&mi->mi_lock);
if (!(mi->mi_flags & MI_PRINTED)) {
mi->mi_flags |= MI_PRINTED;
mutex_exit(&mi->mi_lock);
#ifdef DEBUG
- zprintf(zoneid,
- "NFS%d server %s not responding still trying\n",
- mi->mi_vers, svp->sv_hostname);
-#else
- zprintf(zoneid,
- "NFS server %s not responding still trying\n",
+ zprintf(zoneid, msg, mi->mi_vers,
svp->sv_hostname);
+#else
+ zprintf(zoneid, msg, svp->sv_hostname);
#endif
} else
mutex_exit(&mi->mi_lock);
@@ -1238,13 +1251,10 @@ failoverretry:
*douprintf = 0;
if (!(mi->mi_flags & MI_NOPRINT))
#ifdef DEBUG
- uprintf(
- "NFS%d server %s not responding still trying\n",
- mi->mi_vers, svp->sv_hostname);
-#else
- uprintf(
- "NFS server %s not responding still trying\n",
+ uprintf(msg, mi->mi_vers,
svp->sv_hostname);
+#else
+ uprintf(msg, svp->sv_hostname);
#endif
}