From e92a04afa5cb730137fe5eb80c423553f806ac47 Mon Sep 17 00:00:00 2001 From: Bill Joy Date: Mon, 9 Nov 1981 01:06:36 -0800 Subject: [PATCH] major cleanups for socket code SCCS-vsn: sys/kern/kern_proc.c 4.13 SCCS-vsn: sys/kern/vfs_syscalls.c 4.12 SCCS-vsn: sys/ufs/ffs/ffs_vnops.c 4.12 SCCS-vsn: sys/ufs/ffs/ufs_vnops.c 4.12 SCCS-vsn: sys/ufs/lfs/lfs_vnops.c 4.12 SCCS-vsn: sys/ufs/ufs/ufs_vnops.c 4.12 --- usr/src/sys/kern/kern_proc.c | 75 ++++++++++++++--------------- usr/src/sys/kern/vfs_syscalls.c | 84 +++++++++++++++------------------ usr/src/sys/ufs/ffs/ffs_vnops.c | 84 +++++++++++++++------------------ usr/src/sys/ufs/ffs/ufs_vnops.c | 84 +++++++++++++++------------------ usr/src/sys/ufs/lfs/lfs_vnops.c | 84 +++++++++++++++------------------ usr/src/sys/ufs/ufs/ufs_vnops.c | 84 +++++++++++++++------------------ 6 files changed, 220 insertions(+), 275 deletions(-) diff --git a/usr/src/sys/kern/kern_proc.c b/usr/src/sys/kern/kern_proc.c index e0823e7175..c2c62706bd 100644 --- a/usr/src/sys/kern/kern_proc.c +++ b/usr/src/sys/kern/kern_proc.c @@ -1,4 +1,4 @@ -/* kern_proc.c 4.12 81/04/28 */ +/* kern_proc.c 4.13 81/11/08 */ #include "../h/param.h" #include "../h/systm.h" @@ -51,24 +51,22 @@ exece() if ((ip = namei(uchar, 0)) == NULL) return; - bno = 0; bp = 0; indir = 0; uid = u.u_uid; gid = u.u_gid; - if (ip->i_mode & ISUID) uid = ip->i_uid; if (ip->i_mode & ISGID) gid = ip->i_gid; again: - if(access(ip, IEXEC)) + if (access(ip, IEXEC)) goto bad; - if((u.u_procp->p_flag&STRC) && access(ip, IREAD)) + if ((u.u_procp->p_flag&STRC) && access(ip, IREAD)) goto bad; - if((ip->i_mode & IFMT) != IFREG || + if ((ip->i_mode & IFMT) != IFREG || (ip->i_mode & (IEXEC|(IEXEC>>3)|(IEXEC>>6))) == 0) { u.u_error = EACCES; goto bad; @@ -94,7 +92,7 @@ exece() u.u_segflg = 1; readi(ip); u.u_segflg = 0; - if(u.u_error) + if (u.u_error) goto bad; if (u.u_count > sizeof(u.u_exdata) - sizeof(u.u_exdata.Ux_A) && u.u_exdata.ux_shell[0] != '#') { @@ -193,7 +191,7 @@ exece() if (ap==NULL) break; na++; - if(ap == -1) + if (ap == -1) u.u_error = EFAULT; do { if (nc >= NCARGS-1) @@ -241,7 +239,6 @@ badarg: /* * copy back arglist */ - ucp = USRSTACK - nc - NBPW; ap = ucp - na*NBPW - 3*NBPW; u.u_ar0[SP] = ap; @@ -294,28 +291,32 @@ register struct inode *ip; pagi = SPAGI; else pagi = 0; - - if(u.u_exdata.ux_tsize!=0 && (ip->i_flag&ITEXT)==0 && ip->i_count!=1) { + if (u.u_exdata.ux_tsize!=0 && (ip->i_flag&ITEXT)==0 && + ip->i_count!=1) { register struct file *fp; - for (fp = file; fp < fileNFILE; fp++) + for (fp = file; fp < fileNFILE; fp++) { + if (fp->f_flag & FSOCKET) + continue; if (fp->f_inode == ip && (fp->f_flag&FWRITE)) { u.u_error = ETXTBSY; goto bad; } + } } /* - * find text and data sizes - * try them out for possible - * exceed of max sizes + * Compute text and data sizes and make sure not too large. */ - ts = clrnd(btoc(u.u_exdata.ux_tsize)); ds = clrnd(btoc((u.u_exdata.ux_dsize+u.u_exdata.ux_bsize))); ss = clrnd(SSIZE + btoc(nargc)); if (chksize(ts, ds, ss)) goto bad; + + /* + * Make sure enough space to start process. + */ u.u_cdmap = zdmap; u.u_csmap = zdmap; if (swpexpand(ds, ss, &u.u_cdmap, &u.u_csmap) == NULL) @@ -368,13 +369,8 @@ register struct inode *ip; * set SUID/SGID protections, if no tracing */ if ((u.u_procp->p_flag&STRC)==0) { -#ifndef MELB - if(u.u_uid != 0) -#endif - { - u.u_uid = uid; - u.u_procp->p_uid = uid; - } + u.u_uid = uid; + u.u_procp->p_uid = uid; u.u_gid = gid; } else psignal(u.u_procp, SIGTRAP); @@ -394,7 +390,7 @@ setregs() register i; long sigmask; - for(rp = &u.u_signal[0], sigmask = 1L; rp < &u.u_signal[NSIG]; + for (rp = &u.u_signal[0], sigmask = 1L; rp < &u.u_signal[NSIG]; sigmask <<= 1, rp++) { switch (*rp) { @@ -422,17 +418,18 @@ setregs() } } /* - for(rp = &u.u_ar0[0]; rp < &u.u_ar0[16];) + for (rp = &u.u_ar0[0]; rp < &u.u_ar0[16];) *rp++ = 0; */ u.u_ar0[PC] = u.u_exdata.ux_entloc + 2; /* skip over entry mask */ - for(i=0; ip_cpticks = 0; p->p_pctcpu = 0; - for(i=0; ip_flag &= ~SVFDONE; } - for(i=0; ip_stat = SZOMB; noproc = 1; i = PIDHASH(p->p_pid); @@ -540,8 +535,8 @@ done: ((struct xproc *)p)->xp_xstat = rv; /* overlay */ ((struct xproc *)p)->xp_vm = u.u_vm; /* overlay */ vmsadd(&((struct xproc *)p)->xp_vm, &u.u_cvm); - for(q = proc; q < procNPROC; q++) - if(q->p_pptr == p) { + for (q = proc; q < procNPROC; q++) + if (q->p_pptr == p) { q->p_pptr = &proc[1]; q->p_ppid = 1; wakeup((caddr_t)&proc[1]); @@ -604,10 +599,10 @@ wait1(options, vp) f = 0; loop: - for(p = proc; p < procNPROC; p++) - if(p->p_pptr == u.u_procp) { + for (p = proc; p < procNPROC; p++) + if (p->p_pptr == u.u_procp) { f++; - if(p->p_stat == SZOMB) { + if (p->p_stat == SZOMB) { u.u_r.r_val1 = p->p_pid; u.u_r.r_val2 = ((struct xproc *)p)->xp_xstat; ((struct xproc *)p)->xp_xstat = 0; @@ -674,7 +669,7 @@ fork1(isvfork) a = 0; p2 = NULL; - for(p1 = proc; p1 < procNPROC; p1++) { + for (p1 = proc; p1 < procNPROC; p1++) { if (p1->p_stat==NULL && p2==NULL) p2 = p1; else { @@ -699,7 +694,7 @@ fork1(isvfork) goto out; } p1 = u.u_procp; - if(newproc(isvfork)) { + if (newproc(isvfork)) { u.u_r.r_val1 = p1->p_pid; u.u_r.r_val2 = 1; /* child */ u.u_start = time; diff --git a/usr/src/sys/kern/vfs_syscalls.c b/usr/src/sys/kern/vfs_syscalls.c index 59f4244778..fd52d55b6a 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.11 81/08/12 */ +/* vfs_syscalls.c 4.12 81/11/08 */ #include "../h/param.h" #include "../h/systm.h" @@ -28,23 +28,16 @@ fstat() uap = (struct a *)u.u_ap; fp = getf(uap->fdes); - if(fp == NULL) + if (fp == NULL) return; - if (fp->f_flag&FPORT) { - ptstat(fp); - return; - } -#ifdef BBNNET - if (fp->f_flag&FNET) { - u.u_error = EINVAL; - return; - } -#endif - stat1(fp->f_inode, uap->sb); + if (fp->f_flag & FSOCKET) + sostat(fp->f_socket); + else + stat1(fp->f_inode, uap->sb); } /* - * the stat system call. + * Stat system call. */ stat() { @@ -56,7 +49,7 @@ stat() uap = (struct a *)u.u_ap; ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return; stat1(ip, uap->sb); iput(ip); @@ -67,8 +60,8 @@ stat() * get the inode and pass appropriate parts back. */ stat1(ip, ub) -register struct inode *ip; -struct stat *ub; + register struct inode *ip; + struct stat *ub; { register struct dinode *dp; register struct buf *bp; @@ -76,7 +69,7 @@ struct stat *ub; IUPDAT(ip, &time, &time, 0); /* - * first copy from inode table + * First copy from inode table */ ds.st_dev = ip->i_dev; ds.st_ino = ip->i_number; @@ -87,7 +80,7 @@ struct stat *ub; ds.st_rdev = (dev_t)ip->i_un.i_rdev; ds.st_size = ip->i_size; /* - * next the dates in the disk + * Next the dates in the disk */ bp = bread(ip->i_dev, itod(ip->i_number)); dp = bp->b_un.b_dino; @@ -101,7 +94,7 @@ struct stat *ub; } /* - * the dup system call. + * Dup system call. */ dup() { @@ -116,7 +109,7 @@ dup() m = uap->fdes & ~077; uap->fdes &= 077; fp = getf(uap->fdes); - if(fp == NULL) + if (fp == NULL) return; if ((m&0100) == 0) { if ((i = ufalloc()) < 0) @@ -127,13 +120,9 @@ dup() u.u_error = EBADF; return; } - if (u.u_vrpages[i]) { - u.u_error = ETXTBSY; - return; - } u.u_r.r_val1 = i; } - if (i!=uap->fdes) { + if (i != uap->fdes) { if (u.u_ofile[i]!=NULL) closef(u.u_ofile[i]); u.u_ofile[i] = fp; @@ -142,9 +131,10 @@ dup() } /* - * the mount system call. + * Mount system call. */ -smount() { +smount() +{ dev_t dev; register struct inode *ip; register struct mount *mp; @@ -160,31 +150,31 @@ smount() { uap = (struct a *)u.u_ap; dev = getmdev(); - if(u.u_error) + if (u.u_error) return; u.u_dirp = (caddr_t)uap->freg; ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return; - if(ip->i_count!=1 || (ip->i_mode&(IFBLK&IFCHR))!=0) + if (ip->i_count!=1 || (ip->i_mode&IFMT) != IFDIR) goto out; smp = NULL; - for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) { - if(mp->m_bufp != NULL) { - if(dev == mp->m_dev) + for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) { + if (mp->m_bufp != NULL) { + if (dev == mp->m_dev) goto out; } else - if(smp == NULL) + if (smp == NULL) smp = mp; } mp = smp; - if(mp == NULL) + if (mp == NULL) goto out; (*bdevsw[major(dev)].d_open)(dev, !uap->ronly); - if(u.u_error) + if (u.u_error) goto out; bp = bread(dev, SUPERB); - if(u.u_error) { + if (u.u_error) { brelse(bp); goto out1; } @@ -205,7 +195,7 @@ smount() { *cp = 0; brelse(bp); ip->i_flag |= IMOUNT; - prele(ip); + irele(ip); return; out: @@ -229,19 +219,19 @@ sumount() }; dev = getmdev(); - if(u.u_error) + if (u.u_error) return; xumount(dev); /* remove unused sticky files from text table */ update(); - for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) - if(mp->m_bufp != NULL && dev == mp->m_dev) + for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) + if (mp->m_bufp != NULL && dev == mp->m_dev) goto found; u.u_error = EINVAL; return; found: stillopen = 0; - for(ip = inode; ip < inodeNINODE; ip++) + for (ip = inode; ip < inodeNINODE; ip++) if (ip->i_number != 0 && dev == ip->i_dev) { u.u_error = EBUSY; return; @@ -250,7 +240,7 @@ found: stillopen++; ip = mp->m_inodp; ip->i_flag &= ~IMOUNT; - plock(ip); + ilock(ip); iput(ip); if ((bp = getblk(dev, SUPERB)) != mp->m_bufp) panic("umount"); @@ -279,12 +269,12 @@ getmdev() if (!suser()) return(NODEV); ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return(NODEV); - if((ip->i_mode&IFMT) != IFBLK) + if ((ip->i_mode&IFMT) != IFBLK) u.u_error = ENOTBLK; dev = (dev_t)ip->i_un.i_rdev; - if(major(dev) >= nblkdev) + if (major(dev) >= nblkdev) u.u_error = ENXIO; iput(ip); return(dev); diff --git a/usr/src/sys/ufs/ffs/ffs_vnops.c b/usr/src/sys/ufs/ffs/ffs_vnops.c index 4c0c00252b..51de032610 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.11 81/08/12 */ +/* ffs_vnops.c 4.12 81/11/08 */ #include "../h/param.h" #include "../h/systm.h" @@ -28,23 +28,16 @@ fstat() uap = (struct a *)u.u_ap; fp = getf(uap->fdes); - if(fp == NULL) + if (fp == NULL) return; - if (fp->f_flag&FPORT) { - ptstat(fp); - return; - } -#ifdef BBNNET - if (fp->f_flag&FNET) { - u.u_error = EINVAL; - return; - } -#endif - stat1(fp->f_inode, uap->sb); + if (fp->f_flag & FSOCKET) + sostat(fp->f_socket); + else + stat1(fp->f_inode, uap->sb); } /* - * the stat system call. + * Stat system call. */ stat() { @@ -56,7 +49,7 @@ stat() uap = (struct a *)u.u_ap; ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return; stat1(ip, uap->sb); iput(ip); @@ -67,8 +60,8 @@ stat() * get the inode and pass appropriate parts back. */ stat1(ip, ub) -register struct inode *ip; -struct stat *ub; + register struct inode *ip; + struct stat *ub; { register struct dinode *dp; register struct buf *bp; @@ -76,7 +69,7 @@ struct stat *ub; IUPDAT(ip, &time, &time, 0); /* - * first copy from inode table + * First copy from inode table */ ds.st_dev = ip->i_dev; ds.st_ino = ip->i_number; @@ -87,7 +80,7 @@ struct stat *ub; ds.st_rdev = (dev_t)ip->i_un.i_rdev; ds.st_size = ip->i_size; /* - * next the dates in the disk + * Next the dates in the disk */ bp = bread(ip->i_dev, itod(ip->i_number)); dp = bp->b_un.b_dino; @@ -101,7 +94,7 @@ struct stat *ub; } /* - * the dup system call. + * Dup system call. */ dup() { @@ -116,7 +109,7 @@ dup() m = uap->fdes & ~077; uap->fdes &= 077; fp = getf(uap->fdes); - if(fp == NULL) + if (fp == NULL) return; if ((m&0100) == 0) { if ((i = ufalloc()) < 0) @@ -127,13 +120,9 @@ dup() u.u_error = EBADF; return; } - if (u.u_vrpages[i]) { - u.u_error = ETXTBSY; - return; - } u.u_r.r_val1 = i; } - if (i!=uap->fdes) { + if (i != uap->fdes) { if (u.u_ofile[i]!=NULL) closef(u.u_ofile[i]); u.u_ofile[i] = fp; @@ -142,9 +131,10 @@ dup() } /* - * the mount system call. + * Mount system call. */ -smount() { +smount() +{ dev_t dev; register struct inode *ip; register struct mount *mp; @@ -160,31 +150,31 @@ smount() { uap = (struct a *)u.u_ap; dev = getmdev(); - if(u.u_error) + if (u.u_error) return; u.u_dirp = (caddr_t)uap->freg; ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return; - if(ip->i_count!=1 || (ip->i_mode&(IFBLK&IFCHR))!=0) + if (ip->i_count!=1 || (ip->i_mode&IFMT) != IFDIR) goto out; smp = NULL; - for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) { - if(mp->m_bufp != NULL) { - if(dev == mp->m_dev) + for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) { + if (mp->m_bufp != NULL) { + if (dev == mp->m_dev) goto out; } else - if(smp == NULL) + if (smp == NULL) smp = mp; } mp = smp; - if(mp == NULL) + if (mp == NULL) goto out; (*bdevsw[major(dev)].d_open)(dev, !uap->ronly); - if(u.u_error) + if (u.u_error) goto out; bp = bread(dev, SUPERB); - if(u.u_error) { + if (u.u_error) { brelse(bp); goto out1; } @@ -205,7 +195,7 @@ smount() { *cp = 0; brelse(bp); ip->i_flag |= IMOUNT; - prele(ip); + irele(ip); return; out: @@ -229,19 +219,19 @@ sumount() }; dev = getmdev(); - if(u.u_error) + if (u.u_error) return; xumount(dev); /* remove unused sticky files from text table */ update(); - for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) - if(mp->m_bufp != NULL && dev == mp->m_dev) + for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) + if (mp->m_bufp != NULL && dev == mp->m_dev) goto found; u.u_error = EINVAL; return; found: stillopen = 0; - for(ip = inode; ip < inodeNINODE; ip++) + for (ip = inode; ip < inodeNINODE; ip++) if (ip->i_number != 0 && dev == ip->i_dev) { u.u_error = EBUSY; return; @@ -250,7 +240,7 @@ found: stillopen++; ip = mp->m_inodp; ip->i_flag &= ~IMOUNT; - plock(ip); + ilock(ip); iput(ip); if ((bp = getblk(dev, SUPERB)) != mp->m_bufp) panic("umount"); @@ -279,12 +269,12 @@ getmdev() if (!suser()) return(NODEV); ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return(NODEV); - if((ip->i_mode&IFMT) != IFBLK) + if ((ip->i_mode&IFMT) != IFBLK) u.u_error = ENOTBLK; dev = (dev_t)ip->i_un.i_rdev; - if(major(dev) >= nblkdev) + if (major(dev) >= nblkdev) u.u_error = ENXIO; iput(ip); return(dev); diff --git a/usr/src/sys/ufs/ffs/ufs_vnops.c b/usr/src/sys/ufs/ffs/ufs_vnops.c index 2c811d2ead..55b39177c2 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.11 81/08/12 */ +/* ufs_vnops.c 4.12 81/11/08 */ #include "../h/param.h" #include "../h/systm.h" @@ -28,23 +28,16 @@ fstat() uap = (struct a *)u.u_ap; fp = getf(uap->fdes); - if(fp == NULL) + if (fp == NULL) return; - if (fp->f_flag&FPORT) { - ptstat(fp); - return; - } -#ifdef BBNNET - if (fp->f_flag&FNET) { - u.u_error = EINVAL; - return; - } -#endif - stat1(fp->f_inode, uap->sb); + if (fp->f_flag & FSOCKET) + sostat(fp->f_socket); + else + stat1(fp->f_inode, uap->sb); } /* - * the stat system call. + * Stat system call. */ stat() { @@ -56,7 +49,7 @@ stat() uap = (struct a *)u.u_ap; ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return; stat1(ip, uap->sb); iput(ip); @@ -67,8 +60,8 @@ stat() * get the inode and pass appropriate parts back. */ stat1(ip, ub) -register struct inode *ip; -struct stat *ub; + register struct inode *ip; + struct stat *ub; { register struct dinode *dp; register struct buf *bp; @@ -76,7 +69,7 @@ struct stat *ub; IUPDAT(ip, &time, &time, 0); /* - * first copy from inode table + * First copy from inode table */ ds.st_dev = ip->i_dev; ds.st_ino = ip->i_number; @@ -87,7 +80,7 @@ struct stat *ub; ds.st_rdev = (dev_t)ip->i_un.i_rdev; ds.st_size = ip->i_size; /* - * next the dates in the disk + * Next the dates in the disk */ bp = bread(ip->i_dev, itod(ip->i_number)); dp = bp->b_un.b_dino; @@ -101,7 +94,7 @@ struct stat *ub; } /* - * the dup system call. + * Dup system call. */ dup() { @@ -116,7 +109,7 @@ dup() m = uap->fdes & ~077; uap->fdes &= 077; fp = getf(uap->fdes); - if(fp == NULL) + if (fp == NULL) return; if ((m&0100) == 0) { if ((i = ufalloc()) < 0) @@ -127,13 +120,9 @@ dup() u.u_error = EBADF; return; } - if (u.u_vrpages[i]) { - u.u_error = ETXTBSY; - return; - } u.u_r.r_val1 = i; } - if (i!=uap->fdes) { + if (i != uap->fdes) { if (u.u_ofile[i]!=NULL) closef(u.u_ofile[i]); u.u_ofile[i] = fp; @@ -142,9 +131,10 @@ dup() } /* - * the mount system call. + * Mount system call. */ -smount() { +smount() +{ dev_t dev; register struct inode *ip; register struct mount *mp; @@ -160,31 +150,31 @@ smount() { uap = (struct a *)u.u_ap; dev = getmdev(); - if(u.u_error) + if (u.u_error) return; u.u_dirp = (caddr_t)uap->freg; ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return; - if(ip->i_count!=1 || (ip->i_mode&(IFBLK&IFCHR))!=0) + if (ip->i_count!=1 || (ip->i_mode&IFMT) != IFDIR) goto out; smp = NULL; - for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) { - if(mp->m_bufp != NULL) { - if(dev == mp->m_dev) + for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) { + if (mp->m_bufp != NULL) { + if (dev == mp->m_dev) goto out; } else - if(smp == NULL) + if (smp == NULL) smp = mp; } mp = smp; - if(mp == NULL) + if (mp == NULL) goto out; (*bdevsw[major(dev)].d_open)(dev, !uap->ronly); - if(u.u_error) + if (u.u_error) goto out; bp = bread(dev, SUPERB); - if(u.u_error) { + if (u.u_error) { brelse(bp); goto out1; } @@ -205,7 +195,7 @@ smount() { *cp = 0; brelse(bp); ip->i_flag |= IMOUNT; - prele(ip); + irele(ip); return; out: @@ -229,19 +219,19 @@ sumount() }; dev = getmdev(); - if(u.u_error) + if (u.u_error) return; xumount(dev); /* remove unused sticky files from text table */ update(); - for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) - if(mp->m_bufp != NULL && dev == mp->m_dev) + for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) + if (mp->m_bufp != NULL && dev == mp->m_dev) goto found; u.u_error = EINVAL; return; found: stillopen = 0; - for(ip = inode; ip < inodeNINODE; ip++) + for (ip = inode; ip < inodeNINODE; ip++) if (ip->i_number != 0 && dev == ip->i_dev) { u.u_error = EBUSY; return; @@ -250,7 +240,7 @@ found: stillopen++; ip = mp->m_inodp; ip->i_flag &= ~IMOUNT; - plock(ip); + ilock(ip); iput(ip); if ((bp = getblk(dev, SUPERB)) != mp->m_bufp) panic("umount"); @@ -279,12 +269,12 @@ getmdev() if (!suser()) return(NODEV); ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return(NODEV); - if((ip->i_mode&IFMT) != IFBLK) + if ((ip->i_mode&IFMT) != IFBLK) u.u_error = ENOTBLK; dev = (dev_t)ip->i_un.i_rdev; - if(major(dev) >= nblkdev) + if (major(dev) >= nblkdev) u.u_error = ENXIO; iput(ip); return(dev); diff --git a/usr/src/sys/ufs/lfs/lfs_vnops.c b/usr/src/sys/ufs/lfs/lfs_vnops.c index d23d583971..32ae34e358 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.11 81/08/12 */ +/* lfs_vnops.c 4.12 81/11/08 */ #include "../h/param.h" #include "../h/systm.h" @@ -28,23 +28,16 @@ fstat() uap = (struct a *)u.u_ap; fp = getf(uap->fdes); - if(fp == NULL) + if (fp == NULL) return; - if (fp->f_flag&FPORT) { - ptstat(fp); - return; - } -#ifdef BBNNET - if (fp->f_flag&FNET) { - u.u_error = EINVAL; - return; - } -#endif - stat1(fp->f_inode, uap->sb); + if (fp->f_flag & FSOCKET) + sostat(fp->f_socket); + else + stat1(fp->f_inode, uap->sb); } /* - * the stat system call. + * Stat system call. */ stat() { @@ -56,7 +49,7 @@ stat() uap = (struct a *)u.u_ap; ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return; stat1(ip, uap->sb); iput(ip); @@ -67,8 +60,8 @@ stat() * get the inode and pass appropriate parts back. */ stat1(ip, ub) -register struct inode *ip; -struct stat *ub; + register struct inode *ip; + struct stat *ub; { register struct dinode *dp; register struct buf *bp; @@ -76,7 +69,7 @@ struct stat *ub; IUPDAT(ip, &time, &time, 0); /* - * first copy from inode table + * First copy from inode table */ ds.st_dev = ip->i_dev; ds.st_ino = ip->i_number; @@ -87,7 +80,7 @@ struct stat *ub; ds.st_rdev = (dev_t)ip->i_un.i_rdev; ds.st_size = ip->i_size; /* - * next the dates in the disk + * Next the dates in the disk */ bp = bread(ip->i_dev, itod(ip->i_number)); dp = bp->b_un.b_dino; @@ -101,7 +94,7 @@ struct stat *ub; } /* - * the dup system call. + * Dup system call. */ dup() { @@ -116,7 +109,7 @@ dup() m = uap->fdes & ~077; uap->fdes &= 077; fp = getf(uap->fdes); - if(fp == NULL) + if (fp == NULL) return; if ((m&0100) == 0) { if ((i = ufalloc()) < 0) @@ -127,13 +120,9 @@ dup() u.u_error = EBADF; return; } - if (u.u_vrpages[i]) { - u.u_error = ETXTBSY; - return; - } u.u_r.r_val1 = i; } - if (i!=uap->fdes) { + if (i != uap->fdes) { if (u.u_ofile[i]!=NULL) closef(u.u_ofile[i]); u.u_ofile[i] = fp; @@ -142,9 +131,10 @@ dup() } /* - * the mount system call. + * Mount system call. */ -smount() { +smount() +{ dev_t dev; register struct inode *ip; register struct mount *mp; @@ -160,31 +150,31 @@ smount() { uap = (struct a *)u.u_ap; dev = getmdev(); - if(u.u_error) + if (u.u_error) return; u.u_dirp = (caddr_t)uap->freg; ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return; - if(ip->i_count!=1 || (ip->i_mode&(IFBLK&IFCHR))!=0) + if (ip->i_count!=1 || (ip->i_mode&IFMT) != IFDIR) goto out; smp = NULL; - for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) { - if(mp->m_bufp != NULL) { - if(dev == mp->m_dev) + for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) { + if (mp->m_bufp != NULL) { + if (dev == mp->m_dev) goto out; } else - if(smp == NULL) + if (smp == NULL) smp = mp; } mp = smp; - if(mp == NULL) + if (mp == NULL) goto out; (*bdevsw[major(dev)].d_open)(dev, !uap->ronly); - if(u.u_error) + if (u.u_error) goto out; bp = bread(dev, SUPERB); - if(u.u_error) { + if (u.u_error) { brelse(bp); goto out1; } @@ -205,7 +195,7 @@ smount() { *cp = 0; brelse(bp); ip->i_flag |= IMOUNT; - prele(ip); + irele(ip); return; out: @@ -229,19 +219,19 @@ sumount() }; dev = getmdev(); - if(u.u_error) + if (u.u_error) return; xumount(dev); /* remove unused sticky files from text table */ update(); - for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) - if(mp->m_bufp != NULL && dev == mp->m_dev) + for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) + if (mp->m_bufp != NULL && dev == mp->m_dev) goto found; u.u_error = EINVAL; return; found: stillopen = 0; - for(ip = inode; ip < inodeNINODE; ip++) + for (ip = inode; ip < inodeNINODE; ip++) if (ip->i_number != 0 && dev == ip->i_dev) { u.u_error = EBUSY; return; @@ -250,7 +240,7 @@ found: stillopen++; ip = mp->m_inodp; ip->i_flag &= ~IMOUNT; - plock(ip); + ilock(ip); iput(ip); if ((bp = getblk(dev, SUPERB)) != mp->m_bufp) panic("umount"); @@ -279,12 +269,12 @@ getmdev() if (!suser()) return(NODEV); ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return(NODEV); - if((ip->i_mode&IFMT) != IFBLK) + if ((ip->i_mode&IFMT) != IFBLK) u.u_error = ENOTBLK; dev = (dev_t)ip->i_un.i_rdev; - if(major(dev) >= nblkdev) + if (major(dev) >= nblkdev) u.u_error = ENXIO; iput(ip); return(dev); diff --git a/usr/src/sys/ufs/ufs/ufs_vnops.c b/usr/src/sys/ufs/ufs/ufs_vnops.c index 2c811d2ead..55b39177c2 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.11 81/08/12 */ +/* ufs_vnops.c 4.12 81/11/08 */ #include "../h/param.h" #include "../h/systm.h" @@ -28,23 +28,16 @@ fstat() uap = (struct a *)u.u_ap; fp = getf(uap->fdes); - if(fp == NULL) + if (fp == NULL) return; - if (fp->f_flag&FPORT) { - ptstat(fp); - return; - } -#ifdef BBNNET - if (fp->f_flag&FNET) { - u.u_error = EINVAL; - return; - } -#endif - stat1(fp->f_inode, uap->sb); + if (fp->f_flag & FSOCKET) + sostat(fp->f_socket); + else + stat1(fp->f_inode, uap->sb); } /* - * the stat system call. + * Stat system call. */ stat() { @@ -56,7 +49,7 @@ stat() uap = (struct a *)u.u_ap; ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return; stat1(ip, uap->sb); iput(ip); @@ -67,8 +60,8 @@ stat() * get the inode and pass appropriate parts back. */ stat1(ip, ub) -register struct inode *ip; -struct stat *ub; + register struct inode *ip; + struct stat *ub; { register struct dinode *dp; register struct buf *bp; @@ -76,7 +69,7 @@ struct stat *ub; IUPDAT(ip, &time, &time, 0); /* - * first copy from inode table + * First copy from inode table */ ds.st_dev = ip->i_dev; ds.st_ino = ip->i_number; @@ -87,7 +80,7 @@ struct stat *ub; ds.st_rdev = (dev_t)ip->i_un.i_rdev; ds.st_size = ip->i_size; /* - * next the dates in the disk + * Next the dates in the disk */ bp = bread(ip->i_dev, itod(ip->i_number)); dp = bp->b_un.b_dino; @@ -101,7 +94,7 @@ struct stat *ub; } /* - * the dup system call. + * Dup system call. */ dup() { @@ -116,7 +109,7 @@ dup() m = uap->fdes & ~077; uap->fdes &= 077; fp = getf(uap->fdes); - if(fp == NULL) + if (fp == NULL) return; if ((m&0100) == 0) { if ((i = ufalloc()) < 0) @@ -127,13 +120,9 @@ dup() u.u_error = EBADF; return; } - if (u.u_vrpages[i]) { - u.u_error = ETXTBSY; - return; - } u.u_r.r_val1 = i; } - if (i!=uap->fdes) { + if (i != uap->fdes) { if (u.u_ofile[i]!=NULL) closef(u.u_ofile[i]); u.u_ofile[i] = fp; @@ -142,9 +131,10 @@ dup() } /* - * the mount system call. + * Mount system call. */ -smount() { +smount() +{ dev_t dev; register struct inode *ip; register struct mount *mp; @@ -160,31 +150,31 @@ smount() { uap = (struct a *)u.u_ap; dev = getmdev(); - if(u.u_error) + if (u.u_error) return; u.u_dirp = (caddr_t)uap->freg; ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return; - if(ip->i_count!=1 || (ip->i_mode&(IFBLK&IFCHR))!=0) + if (ip->i_count!=1 || (ip->i_mode&IFMT) != IFDIR) goto out; smp = NULL; - for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) { - if(mp->m_bufp != NULL) { - if(dev == mp->m_dev) + for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) { + if (mp->m_bufp != NULL) { + if (dev == mp->m_dev) goto out; } else - if(smp == NULL) + if (smp == NULL) smp = mp; } mp = smp; - if(mp == NULL) + if (mp == NULL) goto out; (*bdevsw[major(dev)].d_open)(dev, !uap->ronly); - if(u.u_error) + if (u.u_error) goto out; bp = bread(dev, SUPERB); - if(u.u_error) { + if (u.u_error) { brelse(bp); goto out1; } @@ -205,7 +195,7 @@ smount() { *cp = 0; brelse(bp); ip->i_flag |= IMOUNT; - prele(ip); + irele(ip); return; out: @@ -229,19 +219,19 @@ sumount() }; dev = getmdev(); - if(u.u_error) + if (u.u_error) return; xumount(dev); /* remove unused sticky files from text table */ update(); - for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) - if(mp->m_bufp != NULL && dev == mp->m_dev) + for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) + if (mp->m_bufp != NULL && dev == mp->m_dev) goto found; u.u_error = EINVAL; return; found: stillopen = 0; - for(ip = inode; ip < inodeNINODE; ip++) + for (ip = inode; ip < inodeNINODE; ip++) if (ip->i_number != 0 && dev == ip->i_dev) { u.u_error = EBUSY; return; @@ -250,7 +240,7 @@ found: stillopen++; ip = mp->m_inodp; ip->i_flag &= ~IMOUNT; - plock(ip); + ilock(ip); iput(ip); if ((bp = getblk(dev, SUPERB)) != mp->m_bufp) panic("umount"); @@ -279,12 +269,12 @@ getmdev() if (!suser()) return(NODEV); ip = namei(uchar, 0); - if(ip == NULL) + if (ip == NULL) return(NODEV); - if((ip->i_mode&IFMT) != IFBLK) + if ((ip->i_mode&IFMT) != IFBLK) u.u_error = ENOTBLK; dev = (dev_t)ip->i_un.i_rdev; - if(major(dev) >= nblkdev) + if (major(dev) >= nblkdev) u.u_error = ENXIO; iput(ip); return(dev); -- 2.20.1