svn commit: r333656 - in projects/pnfs-planb-server/sys/fs: nfs nfsserver

Rick Macklem rmacklem at FreeBSD.org
Wed May 16 00:57:44 UTC 2018


Author: rmacklem
Date: Wed May 16 00:57:42 2018
New Revision: 333656
URL: https://svnweb.freebsd.org/changeset/base/333656

Log:
  Fix two cases where the test for "no mirrors" didn't traverse the list
  checking for a valid mirror.

Modified:
  projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c
  projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c

Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c
==============================================================================
--- projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c	Tue May 15 23:55:38 2018	(r333655)
+++ projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c	Wed May 16 00:57:42 2018	(r333656)
@@ -4331,8 +4331,12 @@ nfsv4_findmirror(struct nfsmount *nmp, struct nfsdevic
 		if (fndds != NULL)
 			break;
 		if (ds->nfsdev_nmp == nmp) {
-			/* If there are no mirrors, return error. */
-			if (TAILQ_EMPTY(&ds->nfsdev_mirrors)) {
+			/* If there are no mirrors, return NULL. */
+			TAILQ_FOREACH(mds, &ds->nfsdev_mirrors, nfsdev_list) {
+				if (mds->nfsdev_nmp != NULL)
+					break;
+			}
+			if (mds == NULL) {
 				NFSCL_DEBUG(4, "no mirror for DS\n");
 				return (NULL);
 			}

Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c
==============================================================================
--- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c	Tue May 15 23:55:38 2018	(r333655)
+++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c	Wed May 16 00:57:42 2018	(r333656)
@@ -7220,7 +7220,11 @@ nfsrv_delds(char *devid, NFSPROC_T *p)
 		if (NFSBCMP(ds->nfsdev_deviceid, devid, NFSX_V4DEVICEID) == 0 &&
 		    ds->nfsdev_nmp != NULL) {
 			/* If there are no mirrors, return error. */
-			if (TAILQ_EMPTY(&ds->nfsdev_mirrors)) {
+			TAILQ_FOREACH(mds, &ds->nfsdev_mirrors, nfsdev_list) {
+				if (mds->nfsdev_nmp != NULL)
+					break;
+			}
+			if (mds == NULL) {
 				NFSDDSUNLOCK();
 				NFSD_DEBUG(4, "no mirror for DS\n");
 				return (ENXIO);


More information about the svn-src-projects mailing list