diff options
author | nr123932 <none@none> | 2007-03-30 01:55:41 -0700 |
---|---|---|
committer | nr123932 <none@none> | 2007-03-30 01:55:41 -0700 |
commit | 8548bf79039833dba8615afdf63258b2cb122121 (patch) | |
tree | c9d7f506296f12858a99b42d94bda969bb1a4ebc /usr/src/uts/common/vm/vm_as.c | |
parent | 3a62633b4e364efc25704bee4e40b1107709521e (diff) | |
download | illumos-gate-8548bf79039833dba8615afdf63258b2cb122121.tar.gz |
6368753 Need a patch solution to 4522909 automountd hangs with executeable maps
6509943 Apparent deadlock between fork()'s use of lwp_suspend and NFS locking (Backout 4522909)
Diffstat (limited to 'usr/src/uts/common/vm/vm_as.c')
-rw-r--r-- | usr/src/uts/common/vm/vm_as.c | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/usr/src/uts/common/vm/vm_as.c b/usr/src/uts/common/vm/vm_as.c index 801e55659c..42df064cc2 100644 --- a/usr/src/uts/common/vm/vm_as.c +++ b/usr/src/uts/common/vm/vm_as.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -878,10 +878,8 @@ retry: * for a pagefault. This is to avoid deadlock while debugging * a process via /proc over NFS (in particular). */ - if (lwp != NULL) { + if (lwp != NULL) lwp->lwp_nostop++; - lwp->lwp_nostop_r++; - } /* * same length must be used when we softlock and softunlock. @@ -959,10 +957,8 @@ retry: seg = as_segat(as, raddr); if (seg == NULL) { AS_LOCK_EXIT(as, &as->a_lock); - if ((lwp != NULL) && (!is_xhat)) { + if ((lwp != NULL) && (!is_xhat)) lwp->lwp_nostop--; - lwp->lwp_nostop_r--; - } return (FC_NOMAP); } @@ -1042,10 +1038,9 @@ retry: } if (as_lock_held) AS_LOCK_EXIT(as, &as->a_lock); - if ((lwp != NULL) && (!is_xhat)) { + if ((lwp != NULL) && (!is_xhat)) lwp->lwp_nostop--; - lwp->lwp_nostop_r--; - } + /* * If the lower levels returned EDEADLK for a fault, * It means that we should retry the fault. Let's wait @@ -1083,10 +1078,8 @@ retry: * for a pagefault. This is to avoid deadlock while debugging * a process via /proc over NFS (in particular). */ - if (lwp != NULL) { + if (lwp != NULL) lwp->lwp_nostop++; - lwp->lwp_nostop_r++; - } raddr = (caddr_t)((uintptr_t)addr & (uintptr_t)PAGEMASK); rsize = (((size_t)(addr + size) + PAGEOFFSET) & PAGEMASK) - @@ -1096,10 +1089,8 @@ retry: seg = as_segat(as, raddr); if (seg == NULL) { AS_LOCK_EXIT(as, &as->a_lock); - if (lwp != NULL) { + if (lwp != NULL) lwp->lwp_nostop--; - lwp->lwp_nostop_r--; - } return (FC_NOMAP); } @@ -1116,10 +1107,8 @@ retry: break; } AS_LOCK_EXIT(as, &as->a_lock); - if (lwp != NULL) { + if (lwp != NULL) lwp->lwp_nostop--; - lwp->lwp_nostop_r--; - } /* * If the lower levels returned EDEADLK for a fault, * It means that we should retry the fault. Let's wait |