-
-/*
- * Lock an inode. If its already locked, set the WANT bit and sleep.
- */
-void
-ufs_ilock(ip)
- register struct inode *ip;
-{
- struct proc *p = curproc; /* XXX */
-
- while (ip->i_flag & ILOCKED) {
- ip->i_flag |= IWANT;
-#ifdef DIAGNOSTIC
- if (p) {
- if (p->p_pid == ip->i_lockholder)
- panic("locking against myself");
- ip->i_lockwaiter = p->p_pid;
- }
-#endif
- (void) sleep((caddr_t)ip, PINOD);
- }
-#ifdef DIAGNOSTIC
- ip->i_lockwaiter = 0;
- if (p)
- ip->i_lockholder = p->p_pid;
-#endif
- ip->i_flag |= ILOCKED;
- curproc->p_spare[2]++;
-}
-
-/*
- * Unlock an inode. If WANT bit is on, wakeup.
- */
-void
-ufs_iunlock(ip)
- register struct inode *ip;
-{
-
- if ((ip->i_flag & ILOCKED) == 0)
- vprint("ufs_iunlock: unlocked inode", ITOV(ip));
-#ifdef DIAGNOSTIC
- ip->i_lockholder = 0;
-#endif
- ip->i_flag &= ~ILOCKED;
- curproc->p_spare[2]--;
- if (ip->i_flag&IWANT) {
- ip->i_flag &= ~IWANT;
- wakeup((caddr_t)ip);
- }
-}