Fixed the mmap hang fix previously committed so that it works

with options DIAGNOSTIC, and clear up an additional reference
count problem.
This commit is contained in:
John Dyson 1995-04-25 03:32:37 +00:00
parent 28f1950b10
commit a4256da5ad
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=8053

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)ufs_vnops.c 8.10 (Berkeley) 4/1/94
* $Id: ufs_vnops.c,v 1.20 1995/04/09 06:03:45 davidg Exp $
* $Id: ufs_vnops.c,v 1.21 1995/04/24 05:13:17 dyson Exp $
*/
#include <sys/param.h>
@ -1540,9 +1540,7 @@ ufs_lock(ap)
ip = VTOI(vp);
if (ip->i_flag & IN_LOCKED) {
if (p->p_pid == ip->i_lockholder) {
if( ip->i_flag & IN_RECURSE)
++ip->i_lockcount;
else
if( (ip->i_flag & IN_RECURSE) == 0)
panic("ufs_lock: recursive lock not expected, pid: %d\n",
ip->i_lockholder);
} else {
@ -1559,11 +1557,17 @@ ufs_lock(ap)
}
#ifdef DIAGNOSTIC
ip->i_lockwaiter = 0;
if (ip->i_lockholder != 0)
if (((ip->i_flag & IN_RECURSE) == 0) && (ip->i_lockholder != 0))
panic("lockholder (%d) != 0", ip->i_lockholder);
if (p && p->p_pid == 0)
printf("locking by process 0\n");
#endif
if ((ip->i_flag & IN_RECURSE) == 0)
ip->i_lockcount = 1;
else
++ip->i_lockcount;
if (p)
ip->i_lockholder = p->p_pid;
else