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);
 }
 
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to