Page MenuHomeFreeBSD

D24749.id71510.diff
No OneTemporary

D24749.id71510.diff

Index: lib/libugidfw/ugidfw.c
===================================================================
--- lib/libugidfw/ugidfw.c
+++ lib/libugidfw/ugidfw.c
@@ -334,9 +334,8 @@
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);
Index: sbin/mksnap_ffs/mksnap_ffs.c
===================================================================
--- sbin/mksnap_ffs/mksnap_ffs.c
+++ sbin/mksnap_ffs/mksnap_ffs.c
@@ -81,8 +81,7 @@
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);
}
Index: sbin/umount/umount.c
===================================================================
--- sbin/umount/umount.c
+++ sbin/umount/umount.c
@@ -505,8 +505,7 @@
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) {
Index: sys/fs/nfs/nfsdport.h
===================================================================
--- sys/fs/nfs/nfsdport.h
+++ sys/fs/nfs/nfsdport.h
@@ -85,8 +85,7 @@
#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) \
Index: sys/fs/nfsserver/nfs_nfsdport.c
===================================================================
--- sys/fs/nfsserver/nfs_nfsdport.c
+++ sys/fs/nfsserver/nfs_nfsdport.c
@@ -4019,11 +4019,8 @@
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 @@
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 @@
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 @@
/* 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;
Index: sys/fs/nfsserver/nfs_nfsdsocket.c
===================================================================
--- sys/fs/nfsserver/nfs_nfsdsocket.c
+++ sys/fs/nfsserver/nfs_nfsdsocket.c
@@ -1061,10 +1061,7 @@
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);
@@ -1093,8 +1090,7 @@
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;
}
Index: sys/fs/nfsserver/nfs_nfsdstate.c
===================================================================
--- sys/fs/nfsserver/nfs_nfsdstate.c
+++ sys/fs/nfsserver/nfs_nfsdstate.c
@@ -7537,8 +7537,7 @@
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;
@@ -7832,10 +7831,8 @@
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;
}
@@ -8739,10 +8736,8 @@
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;
}
Index: sys/kern/vfs_subr.c
===================================================================
--- sys/kern/vfs_subr.c
+++ sys/kern/vfs_subr.c
@@ -841,8 +841,7 @@
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 @@
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 @@
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;
Index: sys/security/mac_bsdextended/mac_bsdextended.h
===================================================================
--- sys/security/mac_bsdextended/mac_bsdextended.h
+++ sys/security/mac_bsdextended/mac_bsdextended.h
@@ -101,7 +101,7 @@
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;
};
Index: sys/sys/mount.h
===================================================================
--- sys/sys/mount.h
+++ sys/sys/mount.h
@@ -52,6 +52,14 @@
typedef struct fsid { int32_t val[2]; } fsid_t; /* filesystem id type */
+static __inline int
+fsidcmp(const fsid_t *a, const fsid_t *b)
+{
+ /* memcmp would bring in sys/systm.h which complicates ZFS */
+ //return (a->val[0] - b->val[0] || a->val[1] - b->val[1]);
+ return (__builtin_memcmp(a, b, sizeof(fsid_t)));
+}
+
/*
* File identifier.
* These are unique per filesystem on a single machine.
Index: usr.sbin/autofs/autounmountd.c
===================================================================
--- usr.sbin/autofs/autounmountd.c
+++ usr.sbin/autofs/autounmountd.c
@@ -67,8 +67,7 @@
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);
}
Index: usr.sbin/mountd/mountd.c
===================================================================
--- usr.sbin/mountd/mountd.c
+++ usr.sbin/mountd/mountd.c
@@ -1568,10 +1568,8 @@
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 @@
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 @@
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 @@
* 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,

File Metadata

Mime Type
text/plain
Expires
Tue, Apr 21, 3:33 AM (15 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31885144
Default Alt Text
D24749.id71510.diff (10 KB)

Event Timeline