From 2c3059b12521d35820e41bed7b6b9322bb45a87c Mon Sep 17 00:00:00 2001 From: Bill Joy Date: Sun, 1 Feb 1981 07:27:36 -0800 Subject: [PATCH] changes for cached super-blocks SCCS-vsn: sys/kern/vfs_syscalls.c 4.4 SCCS-vsn: sys/ufs/ffs/ffs_vnops.c 4.4 SCCS-vsn: sys/ufs/ffs/ufs_vnops.c 4.4 SCCS-vsn: sys/ufs/lfs/lfs_vnops.c 4.4 SCCS-vsn: sys/ufs/ufs/ufs_vnops.c 4.4 --- usr/src/sys/kern/vfs_syscalls.c | 23 ++++++++++++----------- usr/src/sys/ufs/ffs/ffs_vnops.c | 23 ++++++++++++----------- usr/src/sys/ufs/ffs/ufs_vnops.c | 23 ++++++++++++----------- usr/src/sys/ufs/lfs/lfs_vnops.c | 23 ++++++++++++----------- usr/src/sys/ufs/ufs/ufs_vnops.c | 23 ++++++++++++----------- 5 files changed, 60 insertions(+), 55 deletions(-) diff --git a/usr/src/sys/kern/vfs_syscalls.c b/usr/src/sys/kern/vfs_syscalls.c index b8a0b8a1a0..e7531698d3 100644 --- a/usr/src/sys/kern/vfs_syscalls.c +++ b/usr/src/sys/kern/vfs_syscalls.c @@ -1,4 +1,4 @@ -/* vfs_syscalls.c 4.3 %G% */ +/* vfs_syscalls.c 4.4 %G% */ #include "../h/param.h" #include "../h/systm.h" @@ -181,9 +181,9 @@ smount() } mp->m_inodp = ip; mp->m_dev = dev; - mp->m_bufp = geteblk(); - bcopy((caddr_t)bp->b_un.b_addr, mp->m_bufp->b_un.b_addr, BSIZE); - fp = mp->m_bufp->b_un.b_filsys; + bp->b_flags |= B_LOCKED; + mp->m_bufp = bp; + fp = bp->b_un.b_filsys; fp->s_ilock = 0; fp->s_flock = 0; fp->s_ronly = uap->ronly & 1; @@ -209,8 +209,7 @@ sumount() register struct inode *ip; register struct mount *mp; struct buf *bp; - int flag; - int stillopen = 0; + int stillopen, flag; register struct a { char *fspec; }; @@ -228,17 +227,19 @@ sumount() found: for(ip = &inode[0]; ip < &inode[NINODE]; ip++) - if(ip->i_number != 0 && dev == ip->i_dev) { + if (ip->i_number != 0 && dev == ip->i_dev) { u.u_error = EBUSY; return; - } else if (ip->i_number != 0 && (ip->i_mode&IFMT) == IFBLK - && ip->i_un.i_rdev == dev) - stillopen++; + } else if (ip->i_number != 0 && (ip->i_mode&IFMT) == IFBLK && + ip->i_un.i_rdev == dev) + stillopen++; ip = mp->m_inodp; ip->i_flag &= ~IMOUNT; plock(ip); iput(ip); - bp = mp->m_bufp; + if ((bp = getblk(dev, SUPERB)) != mp->m_bufp) + panic("umount"); + bp->b_flags &= ~B_LOCKED; flag = !bp->b_un.b_filsys->s_ronly; mp->m_bufp = NULL; brelse(bp); diff --git a/usr/src/sys/ufs/ffs/ffs_vnops.c b/usr/src/sys/ufs/ffs/ffs_vnops.c index 8640a4269f..707108bc9f 100644 --- a/usr/src/sys/ufs/ffs/ffs_vnops.c +++ b/usr/src/sys/ufs/ffs/ffs_vnops.c @@ -1,4 +1,4 @@ -/* ffs_vnops.c 4.3 %G% */ +/* ffs_vnops.c 4.4 %G% */ #include "../h/param.h" #include "../h/systm.h" @@ -181,9 +181,9 @@ smount() } mp->m_inodp = ip; mp->m_dev = dev; - mp->m_bufp = geteblk(); - bcopy((caddr_t)bp->b_un.b_addr, mp->m_bufp->b_un.b_addr, BSIZE); - fp = mp->m_bufp->b_un.b_filsys; + bp->b_flags |= B_LOCKED; + mp->m_bufp = bp; + fp = bp->b_un.b_filsys; fp->s_ilock = 0; fp->s_flock = 0; fp->s_ronly = uap->ronly & 1; @@ -209,8 +209,7 @@ sumount() register struct inode *ip; register struct mount *mp; struct buf *bp; - int flag; - int stillopen = 0; + int stillopen, flag; register struct a { char *fspec; }; @@ -228,17 +227,19 @@ sumount() found: for(ip = &inode[0]; ip < &inode[NINODE]; ip++) - if(ip->i_number != 0 && dev == ip->i_dev) { + if (ip->i_number != 0 && dev == ip->i_dev) { u.u_error = EBUSY; return; - } else if (ip->i_number != 0 && (ip->i_mode&IFMT) == IFBLK - && ip->i_un.i_rdev == dev) - stillopen++; + } else if (ip->i_number != 0 && (ip->i_mode&IFMT) == IFBLK && + ip->i_un.i_rdev == dev) + stillopen++; ip = mp->m_inodp; ip->i_flag &= ~IMOUNT; plock(ip); iput(ip); - bp = mp->m_bufp; + if ((bp = getblk(dev, SUPERB)) != mp->m_bufp) + panic("umount"); + bp->b_flags &= ~B_LOCKED; flag = !bp->b_un.b_filsys->s_ronly; mp->m_bufp = NULL; brelse(bp); diff --git a/usr/src/sys/ufs/ffs/ufs_vnops.c b/usr/src/sys/ufs/ffs/ufs_vnops.c index ad469d1dcd..a1343ace00 100644 --- a/usr/src/sys/ufs/ffs/ufs_vnops.c +++ b/usr/src/sys/ufs/ffs/ufs_vnops.c @@ -1,4 +1,4 @@ -/* ufs_vnops.c 4.3 %G% */ +/* ufs_vnops.c 4.4 %G% */ #include "../h/param.h" #include "../h/systm.h" @@ -181,9 +181,9 @@ smount() } mp->m_inodp = ip; mp->m_dev = dev; - mp->m_bufp = geteblk(); - bcopy((caddr_t)bp->b_un.b_addr, mp->m_bufp->b_un.b_addr, BSIZE); - fp = mp->m_bufp->b_un.b_filsys; + bp->b_flags |= B_LOCKED; + mp->m_bufp = bp; + fp = bp->b_un.b_filsys; fp->s_ilock = 0; fp->s_flock = 0; fp->s_ronly = uap->ronly & 1; @@ -209,8 +209,7 @@ sumount() register struct inode *ip; register struct mount *mp; struct buf *bp; - int flag; - int stillopen = 0; + int stillopen, flag; register struct a { char *fspec; }; @@ -228,17 +227,19 @@ sumount() found: for(ip = &inode[0]; ip < &inode[NINODE]; ip++) - if(ip->i_number != 0 && dev == ip->i_dev) { + if (ip->i_number != 0 && dev == ip->i_dev) { u.u_error = EBUSY; return; - } else if (ip->i_number != 0 && (ip->i_mode&IFMT) == IFBLK - && ip->i_un.i_rdev == dev) - stillopen++; + } else if (ip->i_number != 0 && (ip->i_mode&IFMT) == IFBLK && + ip->i_un.i_rdev == dev) + stillopen++; ip = mp->m_inodp; ip->i_flag &= ~IMOUNT; plock(ip); iput(ip); - bp = mp->m_bufp; + if ((bp = getblk(dev, SUPERB)) != mp->m_bufp) + panic("umount"); + bp->b_flags &= ~B_LOCKED; flag = !bp->b_un.b_filsys->s_ronly; mp->m_bufp = NULL; brelse(bp); diff --git a/usr/src/sys/ufs/lfs/lfs_vnops.c b/usr/src/sys/ufs/lfs/lfs_vnops.c index fdddc2b6d7..61e4662045 100644 --- a/usr/src/sys/ufs/lfs/lfs_vnops.c +++ b/usr/src/sys/ufs/lfs/lfs_vnops.c @@ -1,4 +1,4 @@ -/* lfs_vnops.c 4.3 %G% */ +/* lfs_vnops.c 4.4 %G% */ #include "../h/param.h" #include "../h/systm.h" @@ -181,9 +181,9 @@ smount() } mp->m_inodp = ip; mp->m_dev = dev; - mp->m_bufp = geteblk(); - bcopy((caddr_t)bp->b_un.b_addr, mp->m_bufp->b_un.b_addr, BSIZE); - fp = mp->m_bufp->b_un.b_filsys; + bp->b_flags |= B_LOCKED; + mp->m_bufp = bp; + fp = bp->b_un.b_filsys; fp->s_ilock = 0; fp->s_flock = 0; fp->s_ronly = uap->ronly & 1; @@ -209,8 +209,7 @@ sumount() register struct inode *ip; register struct mount *mp; struct buf *bp; - int flag; - int stillopen = 0; + int stillopen, flag; register struct a { char *fspec; }; @@ -228,17 +227,19 @@ sumount() found: for(ip = &inode[0]; ip < &inode[NINODE]; ip++) - if(ip->i_number != 0 && dev == ip->i_dev) { + if (ip->i_number != 0 && dev == ip->i_dev) { u.u_error = EBUSY; return; - } else if (ip->i_number != 0 && (ip->i_mode&IFMT) == IFBLK - && ip->i_un.i_rdev == dev) - stillopen++; + } else if (ip->i_number != 0 && (ip->i_mode&IFMT) == IFBLK && + ip->i_un.i_rdev == dev) + stillopen++; ip = mp->m_inodp; ip->i_flag &= ~IMOUNT; plock(ip); iput(ip); - bp = mp->m_bufp; + if ((bp = getblk(dev, SUPERB)) != mp->m_bufp) + panic("umount"); + bp->b_flags &= ~B_LOCKED; flag = !bp->b_un.b_filsys->s_ronly; mp->m_bufp = NULL; brelse(bp); diff --git a/usr/src/sys/ufs/ufs/ufs_vnops.c b/usr/src/sys/ufs/ufs/ufs_vnops.c index ad469d1dcd..a1343ace00 100644 --- a/usr/src/sys/ufs/ufs/ufs_vnops.c +++ b/usr/src/sys/ufs/ufs/ufs_vnops.c @@ -1,4 +1,4 @@ -/* ufs_vnops.c 4.3 %G% */ +/* ufs_vnops.c 4.4 %G% */ #include "../h/param.h" #include "../h/systm.h" @@ -181,9 +181,9 @@ smount() } mp->m_inodp = ip; mp->m_dev = dev; - mp->m_bufp = geteblk(); - bcopy((caddr_t)bp->b_un.b_addr, mp->m_bufp->b_un.b_addr, BSIZE); - fp = mp->m_bufp->b_un.b_filsys; + bp->b_flags |= B_LOCKED; + mp->m_bufp = bp; + fp = bp->b_un.b_filsys; fp->s_ilock = 0; fp->s_flock = 0; fp->s_ronly = uap->ronly & 1; @@ -209,8 +209,7 @@ sumount() register struct inode *ip; register struct mount *mp; struct buf *bp; - int flag; - int stillopen = 0; + int stillopen, flag; register struct a { char *fspec; }; @@ -228,17 +227,19 @@ sumount() found: for(ip = &inode[0]; ip < &inode[NINODE]; ip++) - if(ip->i_number != 0 && dev == ip->i_dev) { + if (ip->i_number != 0 && dev == ip->i_dev) { u.u_error = EBUSY; return; - } else if (ip->i_number != 0 && (ip->i_mode&IFMT) == IFBLK - && ip->i_un.i_rdev == dev) - stillopen++; + } else if (ip->i_number != 0 && (ip->i_mode&IFMT) == IFBLK && + ip->i_un.i_rdev == dev) + stillopen++; ip = mp->m_inodp; ip->i_flag &= ~IMOUNT; plock(ip); iput(ip); - bp = mp->m_bufp; + if ((bp = getblk(dev, SUPERB)) != mp->m_bufp) + panic("umount"); + bp->b_flags &= ~B_LOCKED; flag = !bp->b_un.b_filsys->s_ronly; mp->m_bufp = NULL; brelse(bp); -- 2.20.1