rid of NINODE
[unix-history] / usr / src / sys / ufs / ffs / ufs_vnops.c
index ad469d1..78ead9b 100644 (file)
@@ -1,4 +1,4 @@
-/*     ufs_vnops.c     4.3     %G%     */
+/*     ufs_vnops.c     4.7     %G%     */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -181,9 +181,9 @@ smount()
        }
        mp->m_inodp = ip;
        mp->m_dev = dev;
        }
        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;
        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;
        register struct inode *ip;
        register struct mount *mp;
        struct buf *bp;
-       int flag;
-       int stillopen = 0;
+       int stillopen, flag;
        register struct a {
                char    *fspec;
        };
        register struct a {
                char    *fspec;
        };
@@ -227,23 +226,26 @@ sumount()
        return;
 
 found:
        return;
 
 found:
-       for(ip = &inode[0]; ip < &inode[NINODE]; ip++)
-               if(ip->i_number != 0 && dev == ip->i_dev) {
+       stillopen = 0;
+       for(ip = inode; ip < inodeNINODE; ip++)
+               if (ip->i_number != 0 && dev == ip->i_dev) {
                        u.u_error = EBUSY;
                        return;
                        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);
        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);
        flag = !bp->b_un.b_filsys->s_ronly;
        mp->m_bufp = NULL;
        brelse(bp);
+       mpurge(mp - &mount[0]);
        if (!stillopen) {
        if (!stillopen) {
-               mpurge(mp - &mount[0]);
                (*bdevsw[major(dev)].d_close)(dev, flag);
                binval(dev);
        }
                (*bdevsw[major(dev)].d_close)(dev, flag);
                binval(dev);
        }