-
- switch (mode) {
-
- case IFCHR:
- cfunc = cdevsw[major(dev)].d_close;
- break;
-
- case IFBLK:
- /*
- * We don't want to really close the device if it is mounted
- */
- for (mp = mount; mp < &mount[NMOUNT]; mp++)
- if (mp->m_bufp != NULL && mp->m_dev == dev)
- return;
- cfunc = bdevsw[major(dev)].d_close;
- break;
-
- default:
- return;
- }
- for (fp = file; fp < fileNFILE; fp++) {
- if (fp->f_type == DTYPE_SOCKET) /* XXX */
- continue;
- if (fp->f_count && (ip = fp->f_inode) &&
- ip->i_rdev == dev && (ip->i_mode&IFMT) == mode)
- return;
- }
- if (mode == IFBLK) {
- /*
- * On last close of a block device (that isn't mounted)
- * we must invalidate any in core blocks
- */
- bflush(dev);
- binval(dev);
- }
- (*cfunc)(dev, flag, fp);
-}
-
-opause()
-{
-
- for (;;)
- sleep((caddr_t)&u, PSLEP);