major cleanups for socket code
authorBill Joy <wnj@ucbvax.Berkeley.EDU>
Mon, 9 Nov 1981 09:06:36 +0000 (01:06 -0800)
committerBill Joy <wnj@ucbvax.Berkeley.EDU>
Mon, 9 Nov 1981 09:06:36 +0000 (01:06 -0800)
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
usr/src/sys/kern/vfs_syscalls.c
usr/src/sys/ufs/ffs/ffs_vnops.c
usr/src/sys/ufs/ffs/ufs_vnops.c
usr/src/sys/ufs/lfs/lfs_vnops.c
usr/src/sys/ufs/ufs/ufs_vnops.c

index e0823e7..c2c6270 100644 (file)
@@ -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"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -51,24 +51,22 @@ exece()
 
        if ((ip = namei(uchar, 0)) == NULL)
                return;
 
        if ((ip = namei(uchar, 0)) == NULL)
                return;
-
        bno = 0;
        bp = 0;
        indir = 0;
        uid = u.u_uid;
        gid = u.u_gid;
        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 (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;
                goto bad;
-       if((u.u_procp->p_flag&STRC) && access(ip, IREAD))
+       if ((u.u_procp->p_flag&STRC) && access(ip, IREAD))
                goto bad;
                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;
           (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;
        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] != '#') {
                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==NULL)
                        break;
                na++;
-               if(ap == -1)
+               if (ap == -1)
                        u.u_error = EFAULT;
                do {
                        if (nc >= NCARGS-1)
                        u.u_error = EFAULT;
                do {
                        if (nc >= NCARGS-1)
@@ -241,7 +239,6 @@ badarg:
        /*
         * copy back arglist
         */
        /*
         * copy back arglist
         */
-
        ucp = USRSTACK - nc - NBPW;
        ap = ucp - na*NBPW - 3*NBPW;
        u.u_ar0[SP] = ap;
        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;
                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;
 
                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;
                        }
                        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;
        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)
        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) {
         * 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);
                u.u_gid = gid;
        } else
                psignal(u.u_procp, SIGTRAP);
@@ -394,7 +390,7 @@ setregs()
        register i;
        long sigmask;
 
        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) {
 
            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 */
                *rp++ = 0;
 */
        u.u_ar0[PC] = u.u_exdata.ux_entloc + 2; /* skip over entry mask */
-       for(i=0; i<NOFILE; i++) {
+       for (i=0; i<NOFILE; i++) {
                if (u.u_pofile[i]&EXCLOSE) {
                        closef(u.u_ofile[i]);
                        u.u_ofile[i] = NULL;
                        u.u_pofile[i] &= ~EXCLOSE;
                }
        }
                if (u.u_pofile[i]&EXCLOSE) {
                        closef(u.u_ofile[i]);
                        u.u_ofile[i] = NULL;
                        u.u_pofile[i] &= ~EXCLOSE;
                }
        }
+
        /*
         * Remember file name for accounting.
         */
        /*
         * Remember file name for accounting.
         */
@@ -441,8 +438,7 @@ setregs()
 }
 
 /*
 }
 
 /*
- * exit system call:
- * pass back caller's arg
+ * Exit system call: pass back caller's arg
  */
 rexit()
 {
  */
 rexit()
 {
@@ -487,7 +483,7 @@ exit(rv)
        (void) spl0();
        p->p_cpticks = 0;
        p->p_pctcpu = 0;
        (void) spl0();
        p->p_cpticks = 0;
        p->p_pctcpu = 0;
-       for(i=0; i<NSIG; i++)
+       for (i=0; i<NSIG; i++)
                u.u_signal[i] = SIG_IGN;
        /*
         * Release virtual memory.  If we resulted from
                u.u_signal[i] = SIG_IGN;
        /*
         * Release virtual memory.  If we resulted from
@@ -503,15 +499,15 @@ exit(rv)
                        sleep((caddr_t)p, PZERO - 1);
                p->p_flag &= ~SVFDONE;
        }
                        sleep((caddr_t)p, PZERO - 1);
                p->p_flag &= ~SVFDONE;
        }
-       for(i=0; i<NOFILE; i++) {
+       for (i=0; i<NOFILE; i++) {
                f = u.u_ofile[i];
                u.u_ofile[i] = NULL;
                closef(f);
        }
                f = u.u_ofile[i];
                u.u_ofile[i] = NULL;
                closef(f);
        }
-       plock(u.u_cdir);
+       ilock(u.u_cdir);
        iput(u.u_cdir);
        if (u.u_rdir) {
        iput(u.u_cdir);
        if (u.u_rdir) {
-               plock(u.u_rdir);
+               ilock(u.u_rdir);
                iput(u.u_rdir);
        }
        u.u_limit[LIM_FSIZE] = INFINITY;
                iput(u.u_rdir);
        }
        u.u_limit[LIM_FSIZE] = INFINITY;
@@ -519,7 +515,6 @@ exit(rv)
        vrelpt(u.u_procp);
        vrelu(u.u_procp, 0);
        multprog--;
        vrelpt(u.u_procp);
        vrelu(u.u_procp, 0);
        multprog--;
-/*     spl7();                 /* clock will get mad because of overlaying */
        p->p_stat = SZOMB;
        noproc = 1;
        i = PIDHASH(p->p_pid);
        p->p_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);
        ((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]);
                        q->p_pptr = &proc[1];
                        q->p_ppid = 1;
                        wakeup((caddr_t)&proc[1]);
@@ -604,10 +599,10 @@ wait1(options, vp)
 
        f = 0;
 loop:
 
        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++;
                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;
                        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;
 
        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 {
                if (p1->p_stat==NULL && p2==NULL)
                        p2 = p1;
                else {
@@ -699,7 +694,7 @@ fork1(isvfork)
                goto out;
        }
        p1 = u.u_procp;
                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;
                u.u_r.r_val1 = p1->p_pid;
                u.u_r.r_val2 = 1;  /* child */
                u.u_start = time;
index 59f4244..fd52d55 100644 (file)
@@ -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"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -28,23 +28,16 @@ fstat()
 
        uap = (struct a *)u.u_ap;
        fp = getf(uap->fdes);
 
        uap = (struct a *)u.u_ap;
        fp = getf(uap->fdes);
-       if(fp == NULL)
+       if (fp == NULL)
                return;
                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()
 {
  */
 stat()
 {
@@ -56,7 +49,7 @@ stat()
 
        uap = (struct a *)u.u_ap;
        ip = namei(uchar, 0);
 
        uap = (struct a *)u.u_ap;
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return;
        stat1(ip, uap->sb);
        iput(ip);
                return;
        stat1(ip, uap->sb);
        iput(ip);
@@ -67,8 +60,8 @@ stat()
  * get the inode and pass appropriate parts back.
  */
 stat1(ip, ub)
  * 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;
 {
        register struct dinode *dp;
        register struct buf *bp;
@@ -76,7 +69,7 @@ struct stat *ub;
 
        IUPDAT(ip, &time, &time, 0);
        /*
 
        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;
         */
        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;
        /*
        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;
         */
        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()
 {
  */
 dup()
 {
@@ -116,7 +109,7 @@ dup()
        m = uap->fdes & ~077;
        uap->fdes &= 077;
        fp = getf(uap->fdes);
        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)
                return;
        if ((m&0100) == 0) {
                if ((i = ufalloc()) < 0)
@@ -127,13 +120,9 @@ dup()
                        u.u_error = EBADF;
                        return;
                }
                        u.u_error = EBADF;
                        return;
                }
-               if (u.u_vrpages[i]) {
-                       u.u_error = ETXTBSY;
-                       return;
-               }
                u.u_r.r_val1 = i;
        }
                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;
                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;
        dev_t dev;
        register struct inode *ip;
        register struct mount *mp;
@@ -160,31 +150,31 @@ smount() {
 
        uap = (struct a *)u.u_ap;
        dev = getmdev();
 
        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);
                return;
        u.u_dirp = (caddr_t)uap->freg;
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return;
                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;
                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
                                goto out;
                } else
-               if(smp == NULL)
+               if (smp == NULL)
                        smp = mp;
        }
        mp = smp;
                        smp = mp;
        }
        mp = smp;
-       if(mp == NULL)
+       if (mp == NULL)
                goto out;
        (*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
                goto out;
        (*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
-       if(u.u_error)
+       if (u.u_error)
                goto out;
        bp = bread(dev, SUPERB);
                goto out;
        bp = bread(dev, SUPERB);
-       if(u.u_error) {
+       if (u.u_error) {
                brelse(bp);
                goto out1;
        }
                brelse(bp);
                goto out1;
        }
@@ -205,7 +195,7 @@ smount() {
        *cp = 0;
        brelse(bp);
        ip->i_flag |= IMOUNT;
        *cp = 0;
        brelse(bp);
        ip->i_flag |= IMOUNT;
-       prele(ip);
+       irele(ip);
        return;
 
 out:
        return;
 
 out:
@@ -229,19 +219,19 @@ sumount()
        };
 
        dev = getmdev();
        };
 
        dev = getmdev();
-       if(u.u_error)
+       if (u.u_error)
                return;
        xumount(dev);   /* remove unused sticky files from text table */
        update();
                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;
                        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;
                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;
                        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");
        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 (!suser())
                return(NODEV);
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return(NODEV);
                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;
                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);
                u.u_error = ENXIO;
        iput(ip);
        return(dev);
index 4c0c002..51de032 100644 (file)
@@ -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"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -28,23 +28,16 @@ fstat()
 
        uap = (struct a *)u.u_ap;
        fp = getf(uap->fdes);
 
        uap = (struct a *)u.u_ap;
        fp = getf(uap->fdes);
-       if(fp == NULL)
+       if (fp == NULL)
                return;
                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()
 {
  */
 stat()
 {
@@ -56,7 +49,7 @@ stat()
 
        uap = (struct a *)u.u_ap;
        ip = namei(uchar, 0);
 
        uap = (struct a *)u.u_ap;
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return;
        stat1(ip, uap->sb);
        iput(ip);
                return;
        stat1(ip, uap->sb);
        iput(ip);
@@ -67,8 +60,8 @@ stat()
  * get the inode and pass appropriate parts back.
  */
 stat1(ip, ub)
  * 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;
 {
        register struct dinode *dp;
        register struct buf *bp;
@@ -76,7 +69,7 @@ struct stat *ub;
 
        IUPDAT(ip, &time, &time, 0);
        /*
 
        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;
         */
        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;
        /*
        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;
         */
        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()
 {
  */
 dup()
 {
@@ -116,7 +109,7 @@ dup()
        m = uap->fdes & ~077;
        uap->fdes &= 077;
        fp = getf(uap->fdes);
        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)
                return;
        if ((m&0100) == 0) {
                if ((i = ufalloc()) < 0)
@@ -127,13 +120,9 @@ dup()
                        u.u_error = EBADF;
                        return;
                }
                        u.u_error = EBADF;
                        return;
                }
-               if (u.u_vrpages[i]) {
-                       u.u_error = ETXTBSY;
-                       return;
-               }
                u.u_r.r_val1 = i;
        }
                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;
                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;
        dev_t dev;
        register struct inode *ip;
        register struct mount *mp;
@@ -160,31 +150,31 @@ smount() {
 
        uap = (struct a *)u.u_ap;
        dev = getmdev();
 
        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);
                return;
        u.u_dirp = (caddr_t)uap->freg;
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return;
                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;
                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
                                goto out;
                } else
-               if(smp == NULL)
+               if (smp == NULL)
                        smp = mp;
        }
        mp = smp;
                        smp = mp;
        }
        mp = smp;
-       if(mp == NULL)
+       if (mp == NULL)
                goto out;
        (*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
                goto out;
        (*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
-       if(u.u_error)
+       if (u.u_error)
                goto out;
        bp = bread(dev, SUPERB);
                goto out;
        bp = bread(dev, SUPERB);
-       if(u.u_error) {
+       if (u.u_error) {
                brelse(bp);
                goto out1;
        }
                brelse(bp);
                goto out1;
        }
@@ -205,7 +195,7 @@ smount() {
        *cp = 0;
        brelse(bp);
        ip->i_flag |= IMOUNT;
        *cp = 0;
        brelse(bp);
        ip->i_flag |= IMOUNT;
-       prele(ip);
+       irele(ip);
        return;
 
 out:
        return;
 
 out:
@@ -229,19 +219,19 @@ sumount()
        };
 
        dev = getmdev();
        };
 
        dev = getmdev();
-       if(u.u_error)
+       if (u.u_error)
                return;
        xumount(dev);   /* remove unused sticky files from text table */
        update();
                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;
                        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;
                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;
                        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");
        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 (!suser())
                return(NODEV);
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return(NODEV);
                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;
                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);
                u.u_error = ENXIO;
        iput(ip);
        return(dev);
index 2c811d2..55b3917 100644 (file)
@@ -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"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -28,23 +28,16 @@ fstat()
 
        uap = (struct a *)u.u_ap;
        fp = getf(uap->fdes);
 
        uap = (struct a *)u.u_ap;
        fp = getf(uap->fdes);
-       if(fp == NULL)
+       if (fp == NULL)
                return;
                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()
 {
  */
 stat()
 {
@@ -56,7 +49,7 @@ stat()
 
        uap = (struct a *)u.u_ap;
        ip = namei(uchar, 0);
 
        uap = (struct a *)u.u_ap;
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return;
        stat1(ip, uap->sb);
        iput(ip);
                return;
        stat1(ip, uap->sb);
        iput(ip);
@@ -67,8 +60,8 @@ stat()
  * get the inode and pass appropriate parts back.
  */
 stat1(ip, ub)
  * 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;
 {
        register struct dinode *dp;
        register struct buf *bp;
@@ -76,7 +69,7 @@ struct stat *ub;
 
        IUPDAT(ip, &time, &time, 0);
        /*
 
        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;
         */
        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;
        /*
        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;
         */
        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()
 {
  */
 dup()
 {
@@ -116,7 +109,7 @@ dup()
        m = uap->fdes & ~077;
        uap->fdes &= 077;
        fp = getf(uap->fdes);
        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)
                return;
        if ((m&0100) == 0) {
                if ((i = ufalloc()) < 0)
@@ -127,13 +120,9 @@ dup()
                        u.u_error = EBADF;
                        return;
                }
                        u.u_error = EBADF;
                        return;
                }
-               if (u.u_vrpages[i]) {
-                       u.u_error = ETXTBSY;
-                       return;
-               }
                u.u_r.r_val1 = i;
        }
                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;
                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;
        dev_t dev;
        register struct inode *ip;
        register struct mount *mp;
@@ -160,31 +150,31 @@ smount() {
 
        uap = (struct a *)u.u_ap;
        dev = getmdev();
 
        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);
                return;
        u.u_dirp = (caddr_t)uap->freg;
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return;
                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;
                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
                                goto out;
                } else
-               if(smp == NULL)
+               if (smp == NULL)
                        smp = mp;
        }
        mp = smp;
                        smp = mp;
        }
        mp = smp;
-       if(mp == NULL)
+       if (mp == NULL)
                goto out;
        (*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
                goto out;
        (*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
-       if(u.u_error)
+       if (u.u_error)
                goto out;
        bp = bread(dev, SUPERB);
                goto out;
        bp = bread(dev, SUPERB);
-       if(u.u_error) {
+       if (u.u_error) {
                brelse(bp);
                goto out1;
        }
                brelse(bp);
                goto out1;
        }
@@ -205,7 +195,7 @@ smount() {
        *cp = 0;
        brelse(bp);
        ip->i_flag |= IMOUNT;
        *cp = 0;
        brelse(bp);
        ip->i_flag |= IMOUNT;
-       prele(ip);
+       irele(ip);
        return;
 
 out:
        return;
 
 out:
@@ -229,19 +219,19 @@ sumount()
        };
 
        dev = getmdev();
        };
 
        dev = getmdev();
-       if(u.u_error)
+       if (u.u_error)
                return;
        xumount(dev);   /* remove unused sticky files from text table */
        update();
                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;
                        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;
                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;
                        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");
        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 (!suser())
                return(NODEV);
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return(NODEV);
                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;
                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);
                u.u_error = ENXIO;
        iput(ip);
        return(dev);
index d23d583..32ae34e 100644 (file)
@@ -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"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -28,23 +28,16 @@ fstat()
 
        uap = (struct a *)u.u_ap;
        fp = getf(uap->fdes);
 
        uap = (struct a *)u.u_ap;
        fp = getf(uap->fdes);
-       if(fp == NULL)
+       if (fp == NULL)
                return;
                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()
 {
  */
 stat()
 {
@@ -56,7 +49,7 @@ stat()
 
        uap = (struct a *)u.u_ap;
        ip = namei(uchar, 0);
 
        uap = (struct a *)u.u_ap;
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return;
        stat1(ip, uap->sb);
        iput(ip);
                return;
        stat1(ip, uap->sb);
        iput(ip);
@@ -67,8 +60,8 @@ stat()
  * get the inode and pass appropriate parts back.
  */
 stat1(ip, ub)
  * 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;
 {
        register struct dinode *dp;
        register struct buf *bp;
@@ -76,7 +69,7 @@ struct stat *ub;
 
        IUPDAT(ip, &time, &time, 0);
        /*
 
        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;
         */
        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;
        /*
        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;
         */
        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()
 {
  */
 dup()
 {
@@ -116,7 +109,7 @@ dup()
        m = uap->fdes & ~077;
        uap->fdes &= 077;
        fp = getf(uap->fdes);
        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)
                return;
        if ((m&0100) == 0) {
                if ((i = ufalloc()) < 0)
@@ -127,13 +120,9 @@ dup()
                        u.u_error = EBADF;
                        return;
                }
                        u.u_error = EBADF;
                        return;
                }
-               if (u.u_vrpages[i]) {
-                       u.u_error = ETXTBSY;
-                       return;
-               }
                u.u_r.r_val1 = i;
        }
                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;
                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;
        dev_t dev;
        register struct inode *ip;
        register struct mount *mp;
@@ -160,31 +150,31 @@ smount() {
 
        uap = (struct a *)u.u_ap;
        dev = getmdev();
 
        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);
                return;
        u.u_dirp = (caddr_t)uap->freg;
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return;
                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;
                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
                                goto out;
                } else
-               if(smp == NULL)
+               if (smp == NULL)
                        smp = mp;
        }
        mp = smp;
                        smp = mp;
        }
        mp = smp;
-       if(mp == NULL)
+       if (mp == NULL)
                goto out;
        (*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
                goto out;
        (*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
-       if(u.u_error)
+       if (u.u_error)
                goto out;
        bp = bread(dev, SUPERB);
                goto out;
        bp = bread(dev, SUPERB);
-       if(u.u_error) {
+       if (u.u_error) {
                brelse(bp);
                goto out1;
        }
                brelse(bp);
                goto out1;
        }
@@ -205,7 +195,7 @@ smount() {
        *cp = 0;
        brelse(bp);
        ip->i_flag |= IMOUNT;
        *cp = 0;
        brelse(bp);
        ip->i_flag |= IMOUNT;
-       prele(ip);
+       irele(ip);
        return;
 
 out:
        return;
 
 out:
@@ -229,19 +219,19 @@ sumount()
        };
 
        dev = getmdev();
        };
 
        dev = getmdev();
-       if(u.u_error)
+       if (u.u_error)
                return;
        xumount(dev);   /* remove unused sticky files from text table */
        update();
                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;
                        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;
                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;
                        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");
        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 (!suser())
                return(NODEV);
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return(NODEV);
                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;
                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);
                u.u_error = ENXIO;
        iput(ip);
        return(dev);
index 2c811d2..55b3917 100644 (file)
@@ -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"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -28,23 +28,16 @@ fstat()
 
        uap = (struct a *)u.u_ap;
        fp = getf(uap->fdes);
 
        uap = (struct a *)u.u_ap;
        fp = getf(uap->fdes);
-       if(fp == NULL)
+       if (fp == NULL)
                return;
                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()
 {
  */
 stat()
 {
@@ -56,7 +49,7 @@ stat()
 
        uap = (struct a *)u.u_ap;
        ip = namei(uchar, 0);
 
        uap = (struct a *)u.u_ap;
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return;
        stat1(ip, uap->sb);
        iput(ip);
                return;
        stat1(ip, uap->sb);
        iput(ip);
@@ -67,8 +60,8 @@ stat()
  * get the inode and pass appropriate parts back.
  */
 stat1(ip, ub)
  * 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;
 {
        register struct dinode *dp;
        register struct buf *bp;
@@ -76,7 +69,7 @@ struct stat *ub;
 
        IUPDAT(ip, &time, &time, 0);
        /*
 
        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;
         */
        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;
        /*
        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;
         */
        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()
 {
  */
 dup()
 {
@@ -116,7 +109,7 @@ dup()
        m = uap->fdes & ~077;
        uap->fdes &= 077;
        fp = getf(uap->fdes);
        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)
                return;
        if ((m&0100) == 0) {
                if ((i = ufalloc()) < 0)
@@ -127,13 +120,9 @@ dup()
                        u.u_error = EBADF;
                        return;
                }
                        u.u_error = EBADF;
                        return;
                }
-               if (u.u_vrpages[i]) {
-                       u.u_error = ETXTBSY;
-                       return;
-               }
                u.u_r.r_val1 = i;
        }
                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;
                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;
        dev_t dev;
        register struct inode *ip;
        register struct mount *mp;
@@ -160,31 +150,31 @@ smount() {
 
        uap = (struct a *)u.u_ap;
        dev = getmdev();
 
        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);
                return;
        u.u_dirp = (caddr_t)uap->freg;
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return;
                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;
                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
                                goto out;
                } else
-               if(smp == NULL)
+               if (smp == NULL)
                        smp = mp;
        }
        mp = smp;
                        smp = mp;
        }
        mp = smp;
-       if(mp == NULL)
+       if (mp == NULL)
                goto out;
        (*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
                goto out;
        (*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
-       if(u.u_error)
+       if (u.u_error)
                goto out;
        bp = bread(dev, SUPERB);
                goto out;
        bp = bread(dev, SUPERB);
-       if(u.u_error) {
+       if (u.u_error) {
                brelse(bp);
                goto out1;
        }
                brelse(bp);
                goto out1;
        }
@@ -205,7 +195,7 @@ smount() {
        *cp = 0;
        brelse(bp);
        ip->i_flag |= IMOUNT;
        *cp = 0;
        brelse(bp);
        ip->i_flag |= IMOUNT;
-       prele(ip);
+       irele(ip);
        return;
 
 out:
        return;
 
 out:
@@ -229,19 +219,19 @@ sumount()
        };
 
        dev = getmdev();
        };
 
        dev = getmdev();
-       if(u.u_error)
+       if (u.u_error)
                return;
        xumount(dev);   /* remove unused sticky files from text table */
        update();
                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;
                        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;
                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;
                        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");
        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 (!suser())
                return(NODEV);
        ip = namei(uchar, 0);
-       if(ip == NULL)
+       if (ip == NULL)
                return(NODEV);
                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;
                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);
                u.u_error = ENXIO;
        iput(ip);
        return(dev);