Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Sep 2017 09:39:16 +0000 (UTC)
From:      Emmanuel Vadot <manu@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r324054 - head/sys/kern
Message-ID:  <201709270939.v8R9dGhR063228@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: manu
Date: Wed Sep 27 09:39:16 2017
New Revision: 324054
URL: https://svnweb.freebsd.org/changeset/base/324054

Log:
  vfs_export: Simplify vfs_export_lookup
  
  If the filesystem is not exported directly return NULL.
  If no address is given and filesystem is exported using some default
  one return it directly, if it doesn't have a default one directly
  return NULL.
  
  Reviewed by:	kib, bapt
  MFC after:	1 week
  Sponsored by:	Gandi.net
  Differential Revision:	https://reviews.freebsd.org/D12505

Modified:
  head/sys/kern/vfs_export.c

Modified: head/sys/kern/vfs_export.c
==============================================================================
--- head/sys/kern/vfs_export.c	Wed Sep 27 06:33:55 2017	(r324053)
+++ head/sys/kern/vfs_export.c	Wed Sep 27 09:39:16 2017	(r324054)
@@ -448,44 +448,46 @@ static struct netcred *
 vfs_export_lookup(struct mount *mp, struct sockaddr *nam)
 {
 	struct netexport *nep;
-	struct netcred *np;
+	struct netcred *np = NULL;
 	struct radix_node_head *rnh;
 	struct sockaddr *saddr;
 
 	nep = mp->mnt_export;
 	if (nep == NULL)
 		return (NULL);
-	np = NULL;
-	if (mp->mnt_flag & MNT_EXPORTED) {
-		/*
-		 * Lookup in the export list first.
-		 */
-		if (nam != NULL) {
-			saddr = nam;
-			rnh = NULL;
-			switch (saddr->sa_family) {
-			case AF_INET:
-				rnh = nep->ne4;
-				break;
-			case AF_INET6:
-				rnh = nep->ne6;
-				break;
-			}
-			if (rnh != NULL) {
-				RADIX_NODE_HEAD_RLOCK(rnh);
-				np = (struct netcred *)
-				    (*rnh->rnh_matchaddr)(saddr, &rnh->rh);
-				RADIX_NODE_HEAD_RUNLOCK(rnh);
-				if (np && np->netc_rnodes->rn_flags & RNF_ROOT)
-					np = NULL;
-			}
-		}
-		/*
-		 * If no address match, use the default if it exists.
-		 */
-		if (np == NULL && mp->mnt_flag & MNT_DEFEXPORTED)
-			np = &nep->ne_defexported;
+	if ((mp->mnt_flag & MNT_EXPORTED) == 0)
+		return (NULL);
+
+	/*
+	 * If no address is provided, use the default if it exists.
+	 */
+	if (nam == NULL) {
+		if ((mp->mnt_flag & MNT_DEFEXPORTED) != 0)
+			return (&nep->ne_defexported);
+		return (NULL);
 	}
+
+	/*
+	 * Lookup in the export list
+	 */
+	saddr = nam;
+	rnh = NULL;
+	switch (saddr->sa_family) {
+	case AF_INET:
+		rnh = nep->ne4;
+		break;
+	case AF_INET6:
+		rnh = nep->ne6;
+		break;
+	}
+	if (rnh != NULL) {
+		RADIX_NODE_HEAD_RLOCK(rnh);
+		np = (struct netcred *) (*rnh->rnh_matchaddr)(saddr, &rnh->rh);
+		RADIX_NODE_HEAD_RUNLOCK(rnh);
+		if (np != NULL && (np->netc_rnodes->rn_flags & RNF_ROOT) != 0)
+			return (NULL);
+	}
+
 	return (np);
 }
 



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