From 23aacadb399d3f3dd29eaa0a598b0359a2cd352a Mon Sep 17 00:00:00 2001 From: dwmalone Date: Tue, 24 Oct 2000 10:13:36 +0000 Subject: Problem to avoid processes getting stuck in "vmopar". From Ian's mail: The problem seems to originate with NFS's postop_attr information that is returned with a read or write RPC. Within a vm_fault context, the code cannot deal with vnode_pager_setsize() shrinking a vnode. The workaround in the patch below stops the nfsm_postop_attr() macro from ever shrinking a vnode. If the new size in the postop_attr information is smaller, then it just sets the nfsnode n_attrstamp to 0 to stop the wrong size getting used in the future. This change only affects postop_attr attributes; the nfsm_loadattr() macro works as normal. The change is implemented by adding a new argument to nfs_loadattrcache() called 'dontshrink'. When this is non-zero, nfs_loadattrcache() will never reduce the vnode/nfsnode size; instead it zeros n_attrstamp. There remain other was processes can get stuck in vmopar. Submitted by: Ian Dowse Reviewed by: dillon Tested by: Vadim Belman --- sys/nfsclient/nfs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sys/nfsclient/nfs.h') diff --git a/sys/nfsclient/nfs.h b/sys/nfsclient/nfs.h index e07a4f5..5c5a823 100644 --- a/sys/nfsclient/nfs.h +++ b/sys/nfsclient/nfs.h @@ -616,7 +616,7 @@ int nfs_request __P((struct vnode *, struct mbuf *, int, struct proc *, struct ucred *, struct mbuf **, struct mbuf **, caddr_t *)); int nfs_loadattrcache __P((struct vnode **, struct mbuf **, caddr_t *, - struct vattr *)); + struct vattr *, int)); int nfs_namei __P((struct nameidata *, fhandle_t *, int, struct nfssvc_sock *, struct sockaddr *, struct mbuf **, caddr_t *, struct vnode **, struct proc *, int, int)); -- cgit v1.1