Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 May 2017 01:28:58 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r318127 - stable/11/sys/fs/nfsclient
Message-ID:  <201705100128.v4A1SwDo060506@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Wed May 10 01:28:58 2017
New Revision: 318127
URL: https://svnweb.freebsd.org/changeset/base/318127

Log:
  MFC: r317465
  Fix handling of a NFSv4.1 callback reply from the session cache.
  
  The nfsv4_seqsession() call returns NFSERR_REPLYFROMCACHE when it has a
  reply in the session, due to a requestor retry. The code erroneously
  assumed a return of 0 for this case. This patch fixes this and adds
  a KASSERT(). This would be an extremely rare occurrence. It was found
  during code inspection during the pNFS server development.

Modified:
  stable/11/sys/fs/nfsclient/nfs_clstate.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/fs/nfsclient/nfs_clstate.c
==============================================================================
--- stable/11/sys/fs/nfsclient/nfs_clstate.c	Wed May 10 01:01:20 2017	(r318126)
+++ stable/11/sys/fs/nfsclient/nfs_clstate.c	Wed May 10 01:28:58 2017	(r318127)
@@ -3560,9 +3560,18 @@ nfscl_docb(struct nfsrv_descript *nd, NF
 				    tsep->nfsess_backslots);
 			}
 			NFSUNLOCKCLSTATE();
-			if (error == 0) {
+			if (error == 0 || error == NFSERR_REPLYFROMCACHE) {
 				gotseq_ok = 1;
 				if (rep != NULL) {
+					/*
+					 * Handle a reply for a retried
+					 * callback.  The reply will be
+					 * re-inserted in the session cache
+					 * by the nfsv4_seqsess_cacherep() call
+					 * after out:
+					 */
+					KASSERT(error == NFSERR_REPLYFROMCACHE,
+					    ("cbsequence: non-NULL rep"));
 					NFSCL_DEBUG(4, "Got cbretry\n");
 					m_freem(nd->nd_mreq);
 					nd->nd_mreq = rep;



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