add proc pointers to appropriate vnode operations
[unix-history] / usr / src / sys / ufs / ufs / ufs_inode.c
index bf359e8..e1954e4 100644 (file)
@@ -4,25 +4,24 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)ufs_inode.c 7.33 (Berkeley) %G%
+ *     @(#)ufs_inode.c 7.39 (Berkeley) %G%
  */
 
 #include "param.h"
 #include "systm.h"
 #include "mount.h"
  */
 
 #include "param.h"
 #include "systm.h"
 #include "mount.h"
-#include "user.h"
 #include "proc.h"
 #include "file.h"
 #include "buf.h"
 #include "proc.h"
 #include "file.h"
 #include "buf.h"
-#include "cmap.h"
 #include "vnode.h"
 #include "vnode.h"
-#include "../ufs/quota.h"
-#include "../ufs/inode.h"
-#include "../ufs/fs.h"
-#include "../ufs/ufsmount.h"
 #include "kernel.h"
 #include "malloc.h"
 
 #include "kernel.h"
 #include "malloc.h"
 
+#include "quota.h"
+#include "inode.h"
+#include "fs.h"
+#include "ufsmount.h"
+
 #define        INOHSZ  512
 #if    ((INOHSZ&(INOHSZ-1)) == 0)
 #define        INOHASH(dev,ino)        (((dev)+(ino))&(INOHSZ-1))
 #define        INOHSZ  512
 #if    ((INOHSZ&(INOHSZ-1)) == 0)
 #define        INOHASH(dev,ino)        (((dev)+(ino))&(INOHSZ-1))
@@ -113,6 +112,7 @@ loop:
        ip->i_devvp = 0;
        ip->i_mode = 0;
        ip->i_diroff = 0;
        ip->i_devvp = 0;
        ip->i_mode = 0;
        ip->i_diroff = 0;
+       ip->i_lockf = 0;
 #ifdef QUOTA
        for (i = 0; i < MAXQUOTAS; i++)
                ip->i_dquot[i] = NODQUOT;
 #ifdef QUOTA
        for (i = 0; i < MAXQUOTAS; i++)
                ip->i_dquot[i] = NODQUOT;
@@ -230,8 +230,9 @@ iput(ip)
  * Last reference to an inode, write the inode out and if necessary,
  * truncate and deallocate the file.
  */
  * Last reference to an inode, write the inode out and if necessary,
  * truncate and deallocate the file.
  */
-ufs_inactive(vp)
+ufs_inactive(vp, p)
        struct vnode *vp;
        struct vnode *vp;
+       struct proc *p;
 {
        register struct inode *ip = VTOI(vp);
        int mode, error = 0;
 {
        register struct inode *ip = VTOI(vp);
        int mode, error = 0;
@@ -255,6 +256,7 @@ ufs_inactive(vp)
                error = itrunc(ip, (u_long)0, 0);
                mode = ip->i_mode;
                ip->i_mode = 0;
                error = itrunc(ip, (u_long)0, 0);
                mode = ip->i_mode;
                ip->i_mode = 0;
+               ip->i_rdev = 0;
                ip->i_flag |= IUPD|ICHG;
                ifree(ip, ip->i_number, mode);
        }
                ip->i_flag |= IUPD|ICHG;
                ifree(ip, ip->i_number, mode);
        }
@@ -376,6 +378,7 @@ itrunc(oip, length, flags)
        int aflags, error, allerror;
        struct inode tip;
 
        int aflags, error, allerror;
        struct inode tip;
 
+       vnode_pager_setsize(ITOV(oip), length);
        if (oip->i_size <= length) {
                oip->i_flag |= ICHG|IUPD;
                error = iupdat(oip, &time, &time, 1);
        if (oip->i_size <= length) {
                oip->i_flag |= ICHG|IUPD;
                error = iupdat(oip, &time, &time, 1);
@@ -417,11 +420,9 @@ itrunc(oip, length, flags)
                        return (error);
                oip->i_size = length;
                size = blksize(fs, oip, lbn);
                        return (error);
                oip->i_size = length;
                size = blksize(fs, oip, lbn);
-               bn = bp->b_blkno;
-               count = howmany(size, CLBYTES);
-                       munhash(oip->i_devvp, bn + i * CLBYTES / DEV_BSIZE);
+               (void) vnode_pager_uncache(ITOV(oip));
                bzero(bp->b_un.b_addr + offset, (unsigned)(size - offset));
                bzero(bp->b_un.b_addr + offset, (unsigned)(size - offset));
-               brealloc(bp, size);
+               allocbuf(bp, size);
                if (flags & IO_SYNC)
                        bwrite(bp);
                else
                if (flags & IO_SYNC)
                        bwrite(bp);
                else
@@ -645,14 +646,13 @@ ilock(ip)
 
        while (ip->i_flag & ILOCKED) {
                ip->i_flag |= IWANT;
 
        while (ip->i_flag & ILOCKED) {
                ip->i_flag |= IWANT;
-               if (ip->i_spare0 == u.u_procp->p_pid)
+               if (ip->i_spare0 == curproc->p_pid)
                        panic("locking against myself");
                        panic("locking against myself");
-               ip->i_spare1 = u.u_procp->p_pid;
+               ip->i_spare1 = curproc->p_pid;
                (void) sleep((caddr_t)ip, PINOD);
        }
        ip->i_spare1 = 0;
                (void) sleep((caddr_t)ip, PINOD);
        }
        ip->i_spare1 = 0;
-       ip->i_spare0 = u.u_procp->p_pid;
-       u.u_spare[0]++;
+       ip->i_spare0 = curproc->p_pid;
        ip->i_flag |= ILOCKED;
 }
 
        ip->i_flag |= ILOCKED;
 }
 
@@ -666,7 +666,6 @@ iunlock(ip)
        if ((ip->i_flag & ILOCKED) == 0)
                vprint("iunlock: unlocked inode", ITOV(ip));
        ip->i_spare0 = 0;
        if ((ip->i_flag & ILOCKED) == 0)
                vprint("iunlock: unlocked inode", ITOV(ip));
        ip->i_spare0 = 0;
-       u.u_spare[0]--;
        ip->i_flag &= ~ILOCKED;
        if (ip->i_flag&IWANT) {
                ip->i_flag &= ~IWANT;
        ip->i_flag &= ~ILOCKED;
        if (ip->i_flag&IWANT) {
                ip->i_flag &= ~IWANT;