Author: freqlabs
Date: Thu May 28 17:08:39 2020
New Revision: 361589
URL: https://svnweb.freebsd.org/changeset/base/361589

Log:
  MFC r361313:
  
  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)
  Sponsored by:   iXsystems, Inc.
  Differential Revision:  https://reviews.freebsd.org/D24749

Modified:
  stable/12/lib/libugidfw/ugidfw.c
  stable/12/sbin/mksnap_ffs/mksnap_ffs.c
  stable/12/sbin/umount/umount.c
  stable/12/sys/fs/nfs/nfsdport.h
  stable/12/sys/fs/nfsserver/nfs_nfsdport.c
  stable/12/sys/fs/nfsserver/nfs_nfsdsocket.c
  stable/12/sys/fs/nfsserver/nfs_nfsdstate.c
  stable/12/sys/kern/vfs_subr.c
  stable/12/sys/security/mac_bsdextended/mac_bsdextended.c
  stable/12/sys/security/mac_bsdextended/mac_bsdextended.h
  stable/12/sys/sys/mount.h
  stable/12/usr.sbin/autofs/autounmountd.c
  stable/12/usr.sbin/mountd/mountd.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/lib/libugidfw/ugidfw.c
==============================================================================
--- stable/12/lib/libugidfw/ugidfw.c    Thu May 28 16:34:53 2020        
(r361588)
+++ stable/12/lib/libugidfw/ugidfw.c    Thu May 28 17:08:39 2020        
(r361589)
@@ -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: stable/12/sbin/mksnap_ffs/mksnap_ffs.c
==============================================================================
--- stable/12/sbin/mksnap_ffs/mksnap_ffs.c      Thu May 28 16:34:53 2020        
(r361588)
+++ stable/12/sbin/mksnap_ffs/mksnap_ffs.c      Thu May 28 17:08:39 2020        
(r361589)
@@ -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: stable/12/sbin/umount/umount.c
==============================================================================
--- stable/12/sbin/umount/umount.c      Thu May 28 16:34:53 2020        
(r361588)
+++ stable/12/sbin/umount/umount.c      Thu May 28 17:08:39 2020        
(r361589)
@@ -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: stable/12/sys/fs/nfs/nfsdport.h
==============================================================================
--- stable/12/sys/fs/nfs/nfsdport.h     Thu May 28 16:34:53 2020        
(r361588)
+++ stable/12/sys/fs/nfs/nfsdport.h     Thu May 28 17:08:39 2020        
(r361589)
@@ -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: stable/12/sys/fs/nfsserver/nfs_nfsdport.c
==============================================================================
--- stable/12/sys/fs/nfsserver/nfs_nfsdport.c   Thu May 28 16:34:53 2020        
(r361588)
+++ stable/12/sys/fs/nfsserver/nfs_nfsdport.c   Thu May 28 17:08:39 2020        
(r361589)
@@ -3969,11 +3969,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;
                        }
@@ -3993,10 +3990,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++;
@@ -4711,10 +4706,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;
                                        }
@@ -5689,8 +5682,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: stable/12/sys/fs/nfsserver/nfs_nfsdsocket.c
==============================================================================
--- stable/12/sys/fs/nfsserver/nfs_nfsdsocket.c Thu May 28 16:34:53 2020        
(r361588)
+++ stable/12/sys/fs/nfsserver/nfs_nfsdsocket.c Thu May 28 17:08:39 2020        
(r361589)
@@ -995,10 +995,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);
@@ -1027,8 +1024,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: stable/12/sys/fs/nfsserver/nfs_nfsdstate.c
==============================================================================
--- stable/12/sys/fs/nfsserver/nfs_nfsdstate.c  Thu May 28 16:34:53 2020        
(r361588)
+++ stable/12/sys/fs/nfsserver/nfs_nfsdstate.c  Thu May 28 17:08:39 2020        
(r361589)
@@ -7520,8 +7520,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;
@@ -7815,10 +7814,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;
                        }
@@ -8717,10 +8714,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: stable/12/sys/kern/vfs_subr.c
==============================================================================
--- stable/12/sys/kern/vfs_subr.c       Thu May 28 16:34:53 2020        
(r361588)
+++ stable/12/sys/kern/vfs_subr.c       Thu May 28 17:08:39 2020        
(r361589)
@@ -711,8 +711,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);
@@ -747,16 +746,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);
@@ -764,8 +760,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: stable/12/sys/security/mac_bsdextended/mac_bsdextended.c
==============================================================================
--- stable/12/sys/security/mac_bsdextended/mac_bsdextended.c    Thu May 28 
16:34:53 2020        (r361588)
+++ stable/12/sys/security/mac_bsdextended/mac_bsdextended.c    Thu May 28 
17:08:39 2020        (r361589)
@@ -301,9 +301,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: stable/12/sys/security/mac_bsdextended/mac_bsdextended.h
==============================================================================
--- stable/12/sys/security/mac_bsdextended/mac_bsdextended.h    Thu May 28 
16:34:53 2020        (r361588)
+++ stable/12/sys/security/mac_bsdextended/mac_bsdextended.h    Thu May 28 
17:08:39 2020        (r361589)
@@ -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: stable/12/sys/sys/mount.h
==============================================================================
--- stable/12/sys/sys/mount.h   Thu May 28 16:34:53 2020        (r361588)
+++ stable/12/sys/sys/mount.h   Thu May 28 17:08:39 2020        (r361589)
@@ -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: stable/12/usr.sbin/autofs/autounmountd.c
==============================================================================
--- stable/12/usr.sbin/autofs/autounmountd.c    Thu May 28 16:34:53 2020        
(r361588)
+++ stable/12/usr.sbin/autofs/autounmountd.c    Thu May 28 17:08:39 2020        
(r361589)
@@ -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: stable/12/usr.sbin/mountd/mountd.c
==============================================================================
--- stable/12/usr.sbin/mountd/mountd.c  Thu May 28 16:34:53 2020        
(r361588)
+++ stable/12/usr.sbin/mountd/mountd.c  Thu May 28 17:08:39 2020        
(r361589)
@@ -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,
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to