plock/prele here now
[unix-history] / usr / src / sys / ufs / lfs / lfs_inode.c
index d74b2c0..18d152b 100644 (file)
@@ -1,4 +1,4 @@
-/*     lfs_inode.c     4.4     81/03/09        */
+/*     lfs_inode.c     4.5     81/04/28        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -410,3 +410,41 @@ struct inode *ip;
        writei(u.u_pdir);
        iput(u.u_pdir);
 }
        writei(u.u_pdir);
        iput(u.u_pdir);
 }
+
+#ifdef plock
+#undef plock
+#endif
+#ifdef prele
+#undef prele
+#endif
+/*
+ * Lock an inode (should be called ilock).
+ * If its already locked,
+ * set the WANT bit and sleep.
+ */
+plock(ip)
+register struct inode *ip;
+{
+
+       while(ip->i_flag&ILOCK) {
+               ip->i_flag |= IWANT;
+               sleep((caddr_t)ip, PINOD);
+       }
+       ip->i_flag |= ILOCK;
+}
+
+/*
+ * Unlock an inode.
+ * If WANT bit is on,
+ * wakeup.
+ */
+prele(ip)
+register struct inode *ip;
+{
+
+       ip->i_flag &= ~ILOCK;
+       if(ip->i_flag&IWANT) {
+               ip->i_flag &= ~IWANT;
+               wakeup((caddr_t)ip);
+       }
+}