diff options
author | dg <dg@FreeBSD.org> | 1995-02-06 02:20:40 +0000 |
---|---|---|
committer | dg <dg@FreeBSD.org> | 1995-02-06 02:20:40 +0000 |
commit | 977da6cc019f33b3102792dbf069039c1df33a80 (patch) | |
tree | 3e751da90e57497d6dcf7e6875a22d7e1cecb4c4 /sys/nfsserver | |
parent | d73fc7937416d1e21cda837d49588224d78b0730 (diff) | |
download | FreeBSD-src-977da6cc019f33b3102792dbf069039c1df33a80.zip FreeBSD-src-977da6cc019f33b3102792dbf069039c1df33a80.tar.gz |
Changed order of release of vnode/object to fix a problem where the vnode
is freed with an old object still attached (subsequently causing a panic).
Fixes NFS server panic "object/pager mismatch".
Submitted by: John Dyson
Diffstat (limited to 'sys/nfsserver')
-rw-r--r-- | sys/nfsserver/nfs_srvsubs.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/nfsserver/nfs_srvsubs.c b/sys/nfsserver/nfs_srvsubs.c index f281360..7b2cf64 100644 --- a/sys/nfsserver/nfs_srvsubs.c +++ b/sys/nfsserver/nfs_srvsubs.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_subs.c 8.3 (Berkeley) 1/4/94 - * $Id: nfs_subs.c,v 1.7 1994/10/17 17:47:37 phk Exp $ + * $Id: nfs_subs.c,v 1.8 1995/01/09 16:05:08 davidg Exp $ */ /* @@ -1207,17 +1207,20 @@ retry: int nfsrv_vput( struct vnode *vp) { if( (vp->v_flag & VVMIO) && vp->v_vmdata) { + vput( vp); vm_object_deallocate( (vm_object_t) vp->v_vmdata); + } else { + vput( vp); } - vput( vp); return 0; } int nfsrv_vrele( struct vnode *vp) { if( (vp->v_flag & VVMIO) && vp->v_vmdata) { + vrele( vp); vm_object_deallocate( (vm_object_t) vp->v_vmdata); + } else { + vrele( vp); } - vrele( vp); return 0; } - |