svn commit: r361313 - in head: lib/libugidfw sbin/mksnap_ffs sbin/umount sys/fs/nfs sys/fs/nfsserver sys/kern sys/security/mac_bsdextended sys/sys usr.sbin/autofs usr.sbin/mountd

Ryan Moeller freqlabs at FreeBSD.org
Thu May 21 01:55:38 UTC 2020


Author: freqlabs
Date: Thu May 21 01:55:35 2020
New Revision: 361313
URL: https://svnweb.freebsd.org/changeset/base/361313

Log:
  Deduplicate fsid comparisons
  
  Comparing fsid_t objects requires internal knowledge of the fsid structure
  and yet this is duplicated across a number of places in the code.
  
  Simplify by creating a fsidcmp function (macro).
  
  Reviewed by:	mjg, rmacklem
  Approved by:	mav (mentor)
  MFC after:	1 week
  Sponsored by:	iXsystems, Inc.
  Differential Revision:	https://reviews.freebsd.org/D24749

Modified:
  head/lib/libugidfw/ugidfw.c
  head/sbin/mksnap_ffs/mksnap_ffs.c
  head/sbin/umount/umount.c
  head/sys/fs/nfs/nfsdport.h
  head/sys/fs/nfsserver/nfs_nfsdport.c
  head/sys/fs/nfsserver/nfs_nfsdsocket.c
  head/sys/fs/nfsserver/nfs_nfsdstate.c
  head/sys/kern/vfs_subr.c
  head/sys/security/mac_bsdextended/mac_bsdextended.c
  head/sys/security/mac_bsdextended/mac_bsdextended.h
  head/sys/sys/mount.h
  head/usr.sbin/autofs/autounmountd.c
  head/usr.sbin/mountd/mountd.c

Modified: head/lib/libugidfw/ugidfw.c
==============================================================================
--- head/lib/libugidfw/ugidfw.c	Thu May 21 01:55:10 2020	(r361312)
+++ head/lib/libugidfw/ugidfw.c	Thu May 21 01:55:35 2020	(r361313)
@@ -334,9 +334,8 @@ bsde_rule_to_string(struct mac_bsdextended_rule *rule,
 		if (rule->mbr_object.mbo_flags & MBO_FSID_DEFINED) {
 			numfs = getmntinfo(&mntbuf, MNT_NOWAIT);
 			for (i = 0; i < numfs; i++)
-				if (memcmp(&(rule->mbr_object.mbo_fsid),
-				    &(mntbuf[i].f_fsid),
-				    sizeof(mntbuf[i].f_fsid)) == 0)
+				if (fsidcmp(&rule->mbr_object.mbo_fsid,
+				    &mntbuf[i].f_fsid) == 0)
 					break;
 			len = snprintf(cur, left, "filesys %s ",
 			    i == numfs ? "???" : mntbuf[i].f_mntonname);

Modified: head/sbin/mksnap_ffs/mksnap_ffs.c
==============================================================================
--- head/sbin/mksnap_ffs/mksnap_ffs.c	Thu May 21 01:55:10 2020	(r361312)
+++ head/sbin/mksnap_ffs/mksnap_ffs.c	Thu May 21 01:55:35 2020	(r361313)
@@ -81,8 +81,7 @@ issamefs(const char *path, struct statfs *stfsp)
 		return (-1);
 	if (statfs(path, &stfsbuf) < 0)
 		return (-1);
-	if ((stfsbuf.f_fsid.val[0] != stfsp->f_fsid.val[0]) ||
-	    (stfsbuf.f_fsid.val[1] != stfsp->f_fsid.val[1]))
+	if (fsidcmp(&stfsbuf.f_fsid, &stfsp->f_fsid) != 0)
 		return (0);
 	return (1);
 }

Modified: head/sbin/umount/umount.c
==============================================================================
--- head/sbin/umount/umount.c	Thu May 21 01:55:10 2020	(r361312)
+++ head/sbin/umount/umount.c	Thu May 21 01:55:35 2020	(r361313)
@@ -505,8 +505,7 @@ getmntentry(const char *fromname, const char *onname, 
 			continue;
 		if (onname != NULL && strcmp(sfs->f_mntonname, onname) != 0)
 			continue;
-		if (fsid != NULL && bcmp(&sfs->f_fsid, fsid,
-		    sizeof(*fsid)) != 0)
+		if (fsid != NULL && fsidcmp(&sfs->f_fsid, fsid) != 0)
 			continue;
 
 		switch (what) {

Modified: head/sys/fs/nfs/nfsdport.h
==============================================================================
--- head/sys/fs/nfs/nfsdport.h	Thu May 21 01:55:10 2020	(r361312)
+++ head/sys/fs/nfs/nfsdport.h	Thu May 21 01:55:35 2020	(r361313)
@@ -85,8 +85,7 @@ struct nfsexstuff {
 #define	NFSVNO_SETEXRDONLY(e)	((e)->nes_exflag = (MNT_EXPORTED|MNT_EXRDONLY))
 
 #define	NFSVNO_CMPFH(f1, f2)						\
-    ((f1)->fh_fsid.val[0] == (f2)->fh_fsid.val[0] &&			\
-     (f1)->fh_fsid.val[1] == (f2)->fh_fsid.val[1] &&			\
+    (fsidcmp(&(f1)->fh_fsid, &(f2)->fh_fsid) == 0 &&			\
      bcmp(&(f1)->fh_fid, &(f2)->fh_fid, sizeof(struct fid)) == 0)
 
 #define	NFSLOCKHASH(f) 							\

Modified: head/sys/fs/nfsserver/nfs_nfsdport.c
==============================================================================
--- head/sys/fs/nfsserver/nfs_nfsdport.c	Thu May 21 01:55:10 2020	(r361312)
+++ head/sys/fs/nfsserver/nfs_nfsdport.c	Thu May 21 01:55:35 2020	(r361313)
@@ -4019,11 +4019,8 @@ nfsrv_pnfscreate(struct vnode *vp, struct vattr *vap, 
 		if (tds->nfsdev_nmp != NULL) {
 			if (tds->nfsdev_mdsisset == 0 && ds == NULL)
 				ds = tds;
-			else if (tds->nfsdev_mdsisset != 0 &&
-			    mp->mnt_stat.f_fsid.val[0] ==
-			    tds->nfsdev_mdsfsid.val[0] &&
-			    mp->mnt_stat.f_fsid.val[1] ==
-			    tds->nfsdev_mdsfsid.val[1]) {
+			else if (tds->nfsdev_mdsisset != 0 && fsidcmp(
+			    &mp->mnt_stat.f_fsid, &tds->nfsdev_mdsfsid) == 0) {
 				ds = fds = tds;
 				break;
 			}
@@ -4043,10 +4040,8 @@ nfsrv_pnfscreate(struct vnode *vp, struct vattr *vap, 
 			if (tds->nfsdev_nmp != NULL &&
 			    ((tds->nfsdev_mdsisset == 0 && fds == NULL) ||
 			     (tds->nfsdev_mdsisset != 0 && fds != NULL &&
-			      mp->mnt_stat.f_fsid.val[0] ==
-			      tds->nfsdev_mdsfsid.val[0] &&
-			      mp->mnt_stat.f_fsid.val[1] ==
-			      tds->nfsdev_mdsfsid.val[1]))) {
+			      fsidcmp(&mp->mnt_stat.f_fsid,
+			      &tds->nfsdev_mdsfsid) == 0))) {
 				dsdir[mirrorcnt] = i;
 				dvp[mirrorcnt] = tds->nfsdev_dsdir[i];
 				mirrorcnt++;
@@ -4778,10 +4773,8 @@ nfsrv_dsgetsockmnt(struct vnode *vp, int lktype, char 
 					      fndds->nfsdev_mdsisset == 0) ||
 					     (tds->nfsdev_mdsisset != 0 &&
 					      fndds->nfsdev_mdsisset != 0 &&
-					      tds->nfsdev_mdsfsid.val[0] ==
-					      mp->mnt_stat.f_fsid.val[0] &&
-					      tds->nfsdev_mdsfsid.val[1] ==
-					      mp->mnt_stat.f_fsid.val[1]))) {
+					      fsidcmp(&tds->nfsdev_mdsfsid,
+					      &mp->mnt_stat.f_fsid) == 0))) {
 						*newnmpp = tds->nfsdev_nmp;
 						break;
 					}
@@ -5968,8 +5961,7 @@ nfsrv_pnfsstatfs(struct statfs *sf, struct mount *mp)
 	/* First, search for matches for same file system. */
 	TAILQ_FOREACH(ds, &nfsrv_devidhead, nfsdev_list) {
 		if (ds->nfsdev_nmp != NULL && ds->nfsdev_mdsisset != 0 &&
-		    ds->nfsdev_mdsfsid.val[0] == mp->mnt_stat.f_fsid.val[0] &&
-		    ds->nfsdev_mdsfsid.val[1] == mp->mnt_stat.f_fsid.val[1]) {
+		    fsidcmp(&ds->nfsdev_mdsfsid, &mp->mnt_stat.f_fsid) == 0) {
 			if (++i > nfsrv_devidcnt)
 				break;
 			*tdvpp++ = ds->nfsdev_dvp;

Modified: head/sys/fs/nfsserver/nfs_nfsdsocket.c
==============================================================================
--- head/sys/fs/nfsserver/nfs_nfsdsocket.c	Thu May 21 01:55:10 2020	(r361312)
+++ head/sys/fs/nfsserver/nfs_nfsdsocket.c	Thu May 21 01:55:35 2020	(r361313)
@@ -1059,10 +1059,7 @@ nfsrvd_compound(struct nfsrv_descript *nd, int isdgram
 			if (!error && !nd->nd_repstat) {
 			    if (op == NFSV4OP_LOOKUP || op == NFSV4OP_LOOKUPP) {
 				new_mp = nvp->v_mount;
-				if (cur_fsid.val[0] !=
-				    new_mp->mnt_stat.f_fsid.val[0] ||
-				    cur_fsid.val[1] !=
-				    new_mp->mnt_stat.f_fsid.val[1]) {
+				if (fsidcmp(&cur_fsid, &new_mp->mnt_stat.f_fsid) != 0) {
 				    /* crossed a server mount point */
 				    nd->nd_repstat = nfsvno_checkexp(new_mp,
 					nd->nd_nam, &nes, &credanon);
@@ -1091,8 +1088,7 @@ nfsrvd_compound(struct nfsrv_descript *nd, int isdgram
 			if (vp == NULL || savevp == NULL) {
 				nd->nd_repstat = NFSERR_NOFILEHANDLE;
 				break;
-			} else if (cur_fsid.val[0] != save_fsid.val[0] ||
-			    cur_fsid.val[1] != save_fsid.val[1]) {
+			} else if (fsidcmp(&cur_fsid, &save_fsid) != 0) {
 				nd->nd_repstat = NFSERR_XDEV;
 				break;
 			}

Modified: head/sys/fs/nfsserver/nfs_nfsdstate.c
==============================================================================
--- head/sys/fs/nfsserver/nfs_nfsdstate.c	Thu May 21 01:55:10 2020	(r361312)
+++ head/sys/fs/nfsserver/nfs_nfsdstate.c	Thu May 21 01:55:35 2020	(r361313)
@@ -7535,8 +7535,7 @@ nfsrv_freelayouts(nfsquad_t *clid, fsid_t *fs, int lay
 		TAILQ_FOREACH_SAFE(lyp, &lhyp->list, lay_list, nlyp) {
 			if (clid->qval != lyp->lay_clientid.qval)
 				continue;
-			if (fs != NULL && (fs->val[0] != lyp->lay_fsid.val[0] ||
-			    fs->val[1] != lyp->lay_fsid.val[1]))
+			if (fs != NULL && fsidcmp(fs, &lyp->lay_fsid) != 0)
 				continue;
 			if (laytype != lyp->lay_type)
 				continue;
@@ -7830,10 +7829,8 @@ nfsrv_delds(char *devid, NFSPROC_T *p)
 		TAILQ_FOREACH(ds, &nfsrv_devidhead, nfsdev_list) {
 			if (ds != fndds && ds->nfsdev_nmp != NULL &&
 			    ds->nfsdev_mdsisset != 0 &&
-			    ds->nfsdev_mdsfsid.val[0] ==
-			    fndds->nfsdev_mdsfsid.val[0] &&
-			    ds->nfsdev_mdsfsid.val[1] ==
-			    fndds->nfsdev_mdsfsid.val[1]) {
+			    fsidcmp(&ds->nfsdev_mdsfsid,
+			    &fndds->nfsdev_mdsfsid) == 0) {
 				fndmirror = 1;
 				break;
 			}
@@ -8737,10 +8734,8 @@ nfsrv_findmirroredds(struct nfsmount *nmp)
 		TAILQ_FOREACH(ds, &nfsrv_devidhead, nfsdev_list) {
 			if (ds != fndds && ds->nfsdev_nmp != NULL &&
 			    ds->nfsdev_mdsisset != 0 &&
-			    ds->nfsdev_mdsfsid.val[0] ==
-			    fndds->nfsdev_mdsfsid.val[0] &&
-			    ds->nfsdev_mdsfsid.val[1] ==
-			    fndds->nfsdev_mdsfsid.val[1]) {
+			    fsidcmp(&ds->nfsdev_mdsfsid,
+			    &fndds->nfsdev_mdsfsid) == 0) {
 				fndmirror = 1;
 				break;
 			}

Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c	Thu May 21 01:55:10 2020	(r361312)
+++ head/sys/kern/vfs_subr.c	Thu May 21 01:55:35 2020	(r361313)
@@ -841,8 +841,7 @@ vfs_getvfs(fsid_t *fsid)
 	CTR2(KTR_VFS, "%s: fsid %p", __func__, fsid);
 	mtx_lock(&mountlist_mtx);
 	TAILQ_FOREACH(mp, &mountlist, mnt_list) {
-		if (mp->mnt_stat.f_fsid.val[0] == fsid->val[0] &&
-		    mp->mnt_stat.f_fsid.val[1] == fsid->val[1]) {
+		if (fsidcmp(&mp->mnt_stat.f_fsid, fsid) == 0) {
 			vfs_ref(mp);
 			mtx_unlock(&mountlist_mtx);
 			return (mp);
@@ -877,16 +876,13 @@ vfs_busyfs(fsid_t *fsid)
 	hash = fsid->val[0] ^ fsid->val[1];
 	hash = (hash >> 16 ^ hash) & (FSID_CACHE_SIZE - 1);
 	mp = cache[hash];
-	if (mp == NULL ||
-	    mp->mnt_stat.f_fsid.val[0] != fsid->val[0] ||
-	    mp->mnt_stat.f_fsid.val[1] != fsid->val[1])
+	if (mp == NULL || fsidcmp(&mp->mnt_stat.f_fsid, fsid) != 0)
 		goto slow;
 	if (vfs_busy(mp, 0) != 0) {
 		cache[hash] = NULL;
 		goto slow;
 	}
-	if (mp->mnt_stat.f_fsid.val[0] == fsid->val[0] &&
-	    mp->mnt_stat.f_fsid.val[1] == fsid->val[1])
+	if (fsidcmp(&mp->mnt_stat.f_fsid, fsid) == 0)
 		return (mp);
 	else
 	    vfs_unbusy(mp);
@@ -894,8 +890,7 @@ vfs_busyfs(fsid_t *fsid)
 slow:
 	mtx_lock(&mountlist_mtx);
 	TAILQ_FOREACH(mp, &mountlist, mnt_list) {
-		if (mp->mnt_stat.f_fsid.val[0] == fsid->val[0] &&
-		    mp->mnt_stat.f_fsid.val[1] == fsid->val[1]) {
+		if (fsidcmp(&mp->mnt_stat.f_fsid, fsid) == 0) {
 			error = vfs_busy(mp, MBF_MNTLSTLOCK);
 			if (error) {
 				cache[hash] = NULL;

Modified: head/sys/security/mac_bsdextended/mac_bsdextended.c
==============================================================================
--- head/sys/security/mac_bsdextended/mac_bsdextended.c	Thu May 21 01:55:10 2020	(r361312)
+++ head/sys/security/mac_bsdextended/mac_bsdextended.c	Thu May 21 01:55:35 2020	(r361313)
@@ -302,9 +302,8 @@ ugidfw_rulecheck(struct mac_bsdextended_rule *rule,
 	}
 
 	if (rule->mbr_object.mbo_flags & MBO_FSID_DEFINED) {
-		match = (bcmp(&(vp->v_mount->mnt_stat.f_fsid),
-		    &(rule->mbr_object.mbo_fsid),
-		    sizeof(rule->mbr_object.mbo_fsid)) == 0);
+		match = (fsidcmp(&vp->v_mount->mnt_stat.f_fsid,
+		    &rule->mbr_object.mbo_fsid) == 0);
 		if (rule->mbr_object.mbo_neg & MBO_FSID_DEFINED)
 			match = !match;
 		if (!match)

Modified: head/sys/security/mac_bsdextended/mac_bsdextended.h
==============================================================================
--- head/sys/security/mac_bsdextended/mac_bsdextended.h	Thu May 21 01:55:10 2020	(r361312)
+++ head/sys/security/mac_bsdextended/mac_bsdextended.h	Thu May 21 01:55:35 2020	(r361313)
@@ -101,7 +101,7 @@ struct mac_bsdextended_object {
 	uid_t	mbo_uid_max;
 	gid_t	mbo_gid_min;
 	gid_t	mbo_gid_max;
-	struct fsid mbo_fsid;
+	fsid_t	mbo_fsid;
 	int	mbo_type;
 };
 

Modified: head/sys/sys/mount.h
==============================================================================
--- head/sys/sys/mount.h	Thu May 21 01:55:10 2020	(r361312)
+++ head/sys/sys/mount.h	Thu May 21 01:55:35 2020	(r361313)
@@ -52,6 +52,8 @@
 
 typedef struct fsid { int32_t val[2]; } fsid_t;	/* filesystem id type */
 
+#define fsidcmp(a, b) memcmp((a), (b), sizeof(fsid_t))
+
 /*
  * File identifier.
  * These are unique per filesystem on a single machine.

Modified: head/usr.sbin/autofs/autounmountd.c
==============================================================================
--- head/usr.sbin/autofs/autounmountd.c	Thu May 21 01:55:10 2020	(r361312)
+++ head/usr.sbin/autofs/autounmountd.c	Thu May 21 01:55:35 2020	(r361313)
@@ -67,8 +67,7 @@ automounted_find(fsid_t fsid)
 	struct automounted_fs *af;
 
 	TAILQ_FOREACH(af, &automounted, af_next) {
-		if (af->af_fsid.val[0] == fsid.val[0] &&
-		    af->af_fsid.val[1] == fsid.val[1])
+		if (fsidcmp(&af->af_fsid, &fsid) == 0)
 			return (af);
 	}
 

Modified: head/usr.sbin/mountd/mountd.c
==============================================================================
--- head/usr.sbin/mountd/mountd.c	Thu May 21 01:55:10 2020	(r361312)
+++ head/usr.sbin/mountd/mountd.c	Thu May 21 01:55:35 2020	(r361313)
@@ -1568,10 +1568,8 @@ get_exportlist_one(int passno)
 				    ep = get_exp();
 				} else {
 				    if (ep) {
-					if (ep->ex_fs.val[0] !=
-					    fsb.f_fsid.val[0] ||
-					    ep->ex_fs.val[1] !=
-					    fsb.f_fsid.val[1]) {
+					if (fsidcmp(&ep->ex_fs, &fsb.f_fsid)
+					    != 0) {
 						getexp_err(ep, tgrp,
 						    "fsid mismatch");
 						goto nextline;
@@ -2088,8 +2086,7 @@ compare_nmount_exportlist(struct iovec *iov, int iovle
 			if ((oep->ex_flag & EX_DONE) == 0) {
 				LOGDEBUG("not done delete=%s", oep->ex_fsdir);
 				if (statfs(oep->ex_fsdir, &ofs) >= 0 &&
-				    oep->ex_fs.val[0] == ofs.f_fsid.val[0] &&
-				    oep->ex_fs.val[1] == ofs.f_fsid.val[1]) {
+				    fsidcmp(&oep->ex_fs, &ofs.f_fsid) == 0) {
 					LOGDEBUG("do delete");
 					/*
 					 * Clear has_publicfh if if was set
@@ -2353,8 +2350,7 @@ ex_search(fsid_t *fsid, struct exportlisthead *exhp)
 
 	i = EXPHASH(fsid);
 	SLIST_FOREACH(ep, &exhp[i], entries) {
-		if (ep->ex_fs.val[0] == fsid->val[0] &&
-		    ep->ex_fs.val[1] == fsid->val[1])
+		if (fsidcmp(&ep->ex_fs, fsid) == 0)
 			return (ep);
 	}
 
@@ -3122,8 +3118,7 @@ do_mount(struct exportlist *ep, struct grouplist *grp,
 				 * filesystem.
 				 */
 				if (statfs(dirp, &fsb1) != 0 ||
-				    bcmp(&fsb1.f_fsid, &fsb->f_fsid,
-				    sizeof (fsb1.f_fsid)) != 0) {
+				    fsidcmp(&fsb1.f_fsid, &fsb->f_fsid) != 0) {
 					*cp = savedc;
 					syslog(LOG_ERR,
 					    "can't export %s %s", dirp,


More information about the svn-src-head mailing list