diff options
author | phk <phk@FreeBSD.org> | 1999-11-20 10:00:46 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1999-11-20 10:00:46 +0000 |
commit | 1adcecffd93c2f4536a5031426a753b1218ed88a (patch) | |
tree | c111db9be70768372eebad9bfc9cbe47bb8a0a9d /sys/kern | |
parent | 5354776cb2ed414ffde1c1fe64dec67336140a07 (diff) | |
download | FreeBSD-src-1adcecffd93c2f4536a5031426a753b1218ed88a.zip FreeBSD-src-1adcecffd93c2f4536a5031426a753b1218ed88a.tar.gz |
struct mountlist and struct mount.mnt_list have no business being
a CIRCLEQ. Change them to TAILQ_HEAD and TAILQ_ENTRY respectively.
This removes ugly mp != (void*)&mountlist comparisons.
Requested by: phk
Submitted by: Jake Burkholder jake@checker.org
PR: 14967
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/init_main.c | 2 | ||||
-rw-r--r-- | sys/kern/kern_shutdown.c | 2 | ||||
-rw-r--r-- | sys/kern/vfs_conf.c | 2 | ||||
-rw-r--r-- | sys/kern/vfs_export.c | 28 | ||||
-rw-r--r-- | sys/kern/vfs_extattr.c | 20 | ||||
-rw-r--r-- | sys/kern/vfs_mount.c | 2 | ||||
-rw-r--r-- | sys/kern/vfs_subr.c | 28 | ||||
-rw-r--r-- | sys/kern/vfs_syscalls.c | 20 |
8 files changed, 50 insertions, 54 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c index ec9cf85..484cfa4 100644 --- a/sys/kern/init_main.c +++ b/sys/kern/init_main.c @@ -447,7 +447,7 @@ xxx_vfs_root_fdtab(dummy) register struct filedesc0 *fdp = &filedesc0; /* Get the vnode for '/'. Set fdp->fd_fd.fd_cdir to reference it. */ - if (VFS_ROOT(CIRCLEQ_FIRST(&mountlist), &rootvnode)) + if (VFS_ROOT(TAILQ_FIRST(&mountlist), &rootvnode)) panic("cannot find root vnode"); fdp->fd_fd.fd_cdir = rootvnode; VREF(fdp->fd_fd.fd_cdir); diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c index 7ee7cc6..cc7e9ff 100644 --- a/sys/kern/kern_shutdown.c +++ b/sys/kern/kern_shutdown.c @@ -229,7 +229,7 @@ boot(howto) if (((bp->b_flags&B_INVAL) == 0 && BUF_REFCNT(bp)) || ((bp->b_flags & (B_DELWRI|B_INVAL)) == B_DELWRI)) { if (bp->b_dev == NODEV) { - CIRCLEQ_REMOVE(&mountlist, + TAILQ_REMOVE(&mountlist, bp->b_vp->v_mount, mnt_list); continue; } diff --git a/sys/kern/vfs_conf.c b/sys/kern/vfs_conf.c index 8932e41..c2fa605 100644 --- a/sys/kern/vfs_conf.c +++ b/sys/kern/vfs_conf.c @@ -213,7 +213,7 @@ done: /* register with list of mounted filesystems */ simple_lock(&mountlist_slock); - CIRCLEQ_INSERT_HEAD(&mountlist, mp, mnt_list); + TAILQ_INSERT_HEAD(&mountlist, mp, mnt_list); simple_unlock(&mountlist_slock); /* sanity check system clock against root filesystem timestamp */ diff --git a/sys/kern/vfs_export.c b/sys/kern/vfs_export.c index 6d339cf..fc850ff 100644 --- a/sys/kern/vfs_export.c +++ b/sys/kern/vfs_export.c @@ -116,7 +116,7 @@ int vfs_ioopt = 0; SYSCTL_INT(_vfs, OID_AUTO, ioopt, CTLFLAG_RW, &vfs_ioopt, 0, ""); #endif -struct mntlist mountlist; /* mounted filesystem list */ +struct mntlist mountlist = TAILQ_HEAD_INITIALIZER(mountlist); /* mounted fs */ struct simplelock mountlist_slock; struct simplelock mntvnode_slock; int nfs_mount_type = -1; @@ -172,7 +172,6 @@ vntblinit() TAILQ_INIT(&vnode_free_list); TAILQ_INIT(&vnode_tobefree_list); simple_lock_init(&vnode_free_list_slock); - CIRCLEQ_INIT(&mountlist); vnode_zone = zinit("VNODE", sizeof (struct vnode), 0, 0, 5); /* * Initialize the filesystem syncer. @@ -315,7 +314,7 @@ vfs_getvfs(fsid) register struct mount *mp; simple_lock(&mountlist_slock); - CIRCLEQ_FOREACH(mp, &mountlist, mnt_list) { + 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]) { simple_unlock(&mountlist_slock); @@ -1973,9 +1972,9 @@ DB_SHOW_COMMAND(lockedvnodes, lockedvnodes) printf("Locked vnodes\n"); simple_lock(&mountlist_slock); - for (mp = CIRCLEQ_FIRST(&mountlist); mp != (void *)&mountlist; mp = nmp) { + for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { if (vfs_busy(mp, LK_NOWAIT, &mountlist_slock, p)) { - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); continue; } LIST_FOREACH(vp, &mp->mnt_vnodelist, v_mntvnodes) { @@ -1983,7 +1982,7 @@ DB_SHOW_COMMAND(lockedvnodes, lockedvnodes) vprint((char *)0, vp); } simple_lock(&mountlist_slock); - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); vfs_unbusy(mp, p); } simple_unlock(&mountlist_slock); @@ -2091,10 +2090,9 @@ sysctl_vnode SYSCTL_HANDLER_ARGS (numvnodes + KINFO_VNODESLOP) * (VPTRSZ + VNODESZ))); simple_lock(&mountlist_slock); - mp = CIRCLEQ_FIRST(&mountlist); - for (; mp != (void *)&mountlist; mp = nmp) { + for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { if (vfs_busy(mp, LK_NOWAIT, &mountlist_slock, p)) { - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); continue; } again: @@ -2120,7 +2118,7 @@ again: } simple_unlock(&mntvnode_slock); simple_lock(&mountlist_slock); - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); vfs_unbusy(mp, p); } simple_unlock(&mountlist_slock); @@ -2159,7 +2157,7 @@ vfs_mountedon(vp) void vfs_unmountall() { - struct mount *mp, *nmp; + struct mount *mp; struct proc *p; int error; @@ -2170,17 +2168,19 @@ vfs_unmountall() /* * Since this only runs when rebooting, it is not interlocked. */ - mp = CIRCLEQ_LAST(&mountlist); - for (; mp != (void *)&mountlist; mp = nmp) { - nmp = CIRCLEQ_PREV(mp, mnt_list); + while(!TAILQ_EMPTY(&mountlist)) { + mp = TAILQ_LAST(&mountlist, mntlist); error = dounmount(mp, MNT_FORCE, p); if (error) { + TAILQ_REMOVE(&mountlist, mp, mnt_list); printf("unmount of %s failed (", mp->mnt_stat.f_mntonname); if (error == EBUSY) printf("BUSY)\n"); else printf("%d)\n", error); + } else { + /* The unmount has removed mp from the mountlist */ } } } diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c index e0045c1..4d5d394 100644 --- a/sys/kern/vfs_extattr.c +++ b/sys/kern/vfs_extattr.c @@ -331,7 +331,7 @@ update: vp->v_mountedhere = mp; simple_unlock(&vp->v_interlock); simple_lock(&mountlist_slock); - CIRCLEQ_INSERT_TAIL(&mountlist, mp, mnt_list); + TAILQ_INSERT_TAIL(&mountlist, mp, mnt_list); simple_unlock(&mountlist_slock); checkdirs(vp); VOP_UNLOCK(vp, 0, p); @@ -494,7 +494,7 @@ dounmount(mp, flags, p) wakeup((caddr_t)mp); return (error); } - CIRCLEQ_REMOVE(&mountlist, mp, mnt_list); + TAILQ_REMOVE(&mountlist, mp, mnt_list); if ((coveredvp = mp->mnt_vnodecovered) != NULLVP) { coveredvp->v_mountedhere = (struct mount *)0; vrele(coveredvp); @@ -533,10 +533,9 @@ sync(p, uap) int asyncflag; simple_lock(&mountlist_slock); - mp = CIRCLEQ_FIRST(&mountlist); - for (; mp != (void *)&mountlist; mp = nmp) { + for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { if (vfs_busy(mp, LK_NOWAIT, &mountlist_slock, p)) { - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); continue; } if ((mp->mnt_flag & MNT_RDONLY) == 0) { @@ -548,7 +547,7 @@ sync(p, uap) mp->mnt_flag |= asyncflag; } simple_lock(&mountlist_slock); - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); vfs_unbusy(mp, p); } simple_unlock(&mountlist_slock); @@ -718,10 +717,9 @@ getfsstat(p, uap) sfsp = (caddr_t)SCARG(uap, buf); count = 0; simple_lock(&mountlist_slock); - mp = CIRCLEQ_FIRST(&mountlist); - for (; mp != (void *)&mountlist; mp = nmp) { + for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { if (vfs_busy(mp, LK_NOWAIT, &mountlist_slock, p)) { - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); continue; } if (sfsp && count < maxcount) { @@ -735,7 +733,7 @@ getfsstat(p, uap) (SCARG(uap, flags) & MNT_WAIT)) && (error = VFS_STATFS(mp, sp, p))) { simple_lock(&mountlist_slock); - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); vfs_unbusy(mp, p); continue; } @@ -749,7 +747,7 @@ getfsstat(p, uap) } count++; simple_lock(&mountlist_slock); - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); vfs_unbusy(mp, p); } simple_unlock(&mountlist_slock); diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index 8932e41..c2fa605 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -213,7 +213,7 @@ done: /* register with list of mounted filesystems */ simple_lock(&mountlist_slock); - CIRCLEQ_INSERT_HEAD(&mountlist, mp, mnt_list); + TAILQ_INSERT_HEAD(&mountlist, mp, mnt_list); simple_unlock(&mountlist_slock); /* sanity check system clock against root filesystem timestamp */ diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 6d339cf..fc850ff 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -116,7 +116,7 @@ int vfs_ioopt = 0; SYSCTL_INT(_vfs, OID_AUTO, ioopt, CTLFLAG_RW, &vfs_ioopt, 0, ""); #endif -struct mntlist mountlist; /* mounted filesystem list */ +struct mntlist mountlist = TAILQ_HEAD_INITIALIZER(mountlist); /* mounted fs */ struct simplelock mountlist_slock; struct simplelock mntvnode_slock; int nfs_mount_type = -1; @@ -172,7 +172,6 @@ vntblinit() TAILQ_INIT(&vnode_free_list); TAILQ_INIT(&vnode_tobefree_list); simple_lock_init(&vnode_free_list_slock); - CIRCLEQ_INIT(&mountlist); vnode_zone = zinit("VNODE", sizeof (struct vnode), 0, 0, 5); /* * Initialize the filesystem syncer. @@ -315,7 +314,7 @@ vfs_getvfs(fsid) register struct mount *mp; simple_lock(&mountlist_slock); - CIRCLEQ_FOREACH(mp, &mountlist, mnt_list) { + 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]) { simple_unlock(&mountlist_slock); @@ -1973,9 +1972,9 @@ DB_SHOW_COMMAND(lockedvnodes, lockedvnodes) printf("Locked vnodes\n"); simple_lock(&mountlist_slock); - for (mp = CIRCLEQ_FIRST(&mountlist); mp != (void *)&mountlist; mp = nmp) { + for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { if (vfs_busy(mp, LK_NOWAIT, &mountlist_slock, p)) { - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); continue; } LIST_FOREACH(vp, &mp->mnt_vnodelist, v_mntvnodes) { @@ -1983,7 +1982,7 @@ DB_SHOW_COMMAND(lockedvnodes, lockedvnodes) vprint((char *)0, vp); } simple_lock(&mountlist_slock); - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); vfs_unbusy(mp, p); } simple_unlock(&mountlist_slock); @@ -2091,10 +2090,9 @@ sysctl_vnode SYSCTL_HANDLER_ARGS (numvnodes + KINFO_VNODESLOP) * (VPTRSZ + VNODESZ))); simple_lock(&mountlist_slock); - mp = CIRCLEQ_FIRST(&mountlist); - for (; mp != (void *)&mountlist; mp = nmp) { + for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { if (vfs_busy(mp, LK_NOWAIT, &mountlist_slock, p)) { - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); continue; } again: @@ -2120,7 +2118,7 @@ again: } simple_unlock(&mntvnode_slock); simple_lock(&mountlist_slock); - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); vfs_unbusy(mp, p); } simple_unlock(&mountlist_slock); @@ -2159,7 +2157,7 @@ vfs_mountedon(vp) void vfs_unmountall() { - struct mount *mp, *nmp; + struct mount *mp; struct proc *p; int error; @@ -2170,17 +2168,19 @@ vfs_unmountall() /* * Since this only runs when rebooting, it is not interlocked. */ - mp = CIRCLEQ_LAST(&mountlist); - for (; mp != (void *)&mountlist; mp = nmp) { - nmp = CIRCLEQ_PREV(mp, mnt_list); + while(!TAILQ_EMPTY(&mountlist)) { + mp = TAILQ_LAST(&mountlist, mntlist); error = dounmount(mp, MNT_FORCE, p); if (error) { + TAILQ_REMOVE(&mountlist, mp, mnt_list); printf("unmount of %s failed (", mp->mnt_stat.f_mntonname); if (error == EBUSY) printf("BUSY)\n"); else printf("%d)\n", error); + } else { + /* The unmount has removed mp from the mountlist */ } } } diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index e0045c1..4d5d394 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -331,7 +331,7 @@ update: vp->v_mountedhere = mp; simple_unlock(&vp->v_interlock); simple_lock(&mountlist_slock); - CIRCLEQ_INSERT_TAIL(&mountlist, mp, mnt_list); + TAILQ_INSERT_TAIL(&mountlist, mp, mnt_list); simple_unlock(&mountlist_slock); checkdirs(vp); VOP_UNLOCK(vp, 0, p); @@ -494,7 +494,7 @@ dounmount(mp, flags, p) wakeup((caddr_t)mp); return (error); } - CIRCLEQ_REMOVE(&mountlist, mp, mnt_list); + TAILQ_REMOVE(&mountlist, mp, mnt_list); if ((coveredvp = mp->mnt_vnodecovered) != NULLVP) { coveredvp->v_mountedhere = (struct mount *)0; vrele(coveredvp); @@ -533,10 +533,9 @@ sync(p, uap) int asyncflag; simple_lock(&mountlist_slock); - mp = CIRCLEQ_FIRST(&mountlist); - for (; mp != (void *)&mountlist; mp = nmp) { + for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { if (vfs_busy(mp, LK_NOWAIT, &mountlist_slock, p)) { - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); continue; } if ((mp->mnt_flag & MNT_RDONLY) == 0) { @@ -548,7 +547,7 @@ sync(p, uap) mp->mnt_flag |= asyncflag; } simple_lock(&mountlist_slock); - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); vfs_unbusy(mp, p); } simple_unlock(&mountlist_slock); @@ -718,10 +717,9 @@ getfsstat(p, uap) sfsp = (caddr_t)SCARG(uap, buf); count = 0; simple_lock(&mountlist_slock); - mp = CIRCLEQ_FIRST(&mountlist); - for (; mp != (void *)&mountlist; mp = nmp) { + for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { if (vfs_busy(mp, LK_NOWAIT, &mountlist_slock, p)) { - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); continue; } if (sfsp && count < maxcount) { @@ -735,7 +733,7 @@ getfsstat(p, uap) (SCARG(uap, flags) & MNT_WAIT)) && (error = VFS_STATFS(mp, sp, p))) { simple_lock(&mountlist_slock); - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); vfs_unbusy(mp, p); continue; } @@ -749,7 +747,7 @@ getfsstat(p, uap) } count++; simple_lock(&mountlist_slock); - nmp = CIRCLEQ_NEXT(mp, mnt_list); + nmp = TAILQ_NEXT(mp, mnt_list); vfs_unbusy(mp, p); } simple_unlock(&mountlist_slock); |