diff options
author | zec <zec@FreeBSD.org> | 2009-08-24 10:09:30 +0000 |
---|---|---|
committer | zec <zec@FreeBSD.org> | 2009-08-24 10:09:30 +0000 |
commit | 19bb42c4683c0b8129df0c1807d6980d4535679d (patch) | |
tree | 5ba9dcd2e54bc9abd1d333c3fb6c2e11842ff46f /sys/fs | |
parent | fb1931d971247184022a15dd9f7150669e17efe6 (diff) | |
download | FreeBSD-src-19bb42c4683c0b8129df0c1807d6980d4535679d.zip FreeBSD-src-19bb42c4683c0b8129df0c1807d6980d4535679d.tar.gz |
Fix NFS panics with options VIMAGE kernels by apropriately setting curvnet
context inside the RPC code.
Temporarily set td's cred to mount's cred before calling socreate() via
__rpc_nconf2socket().
Submitted by: rmacklem (in part)
Reviewed by: rmacklem, rwatson
Discussed with: dfr, bz
Approved by: re (rwatson), julian (mentor)
MFC after: 3 days
Diffstat (limited to 'sys/fs')
-rw-r--r-- | sys/fs/nfsclient/nfs_clvnops.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c index 219c62e..5dc3a59 100644 --- a/sys/fs/nfsclient/nfs_clvnops.c +++ b/sys/fs/nfsclient/nfs_clvnops.c @@ -1405,8 +1405,8 @@ again: } mtx_unlock(&dnp->n_mtx); - CURVNET_SET(P_TO_VNET(&proc0)); #ifdef INET + CURVNET_SET(CRED_TO_VNET(cnp->cn_cred)); IN_IFADDR_RLOCK(); if (!TAILQ_EMPTY(&V_in_ifaddrhead)) cverf.lval[0] = IA_SIN(TAILQ_FIRST(&V_in_ifaddrhead))->sin_addr.s_addr; @@ -1415,9 +1415,9 @@ again: cverf.lval[0] = create_verf; #ifdef INET IN_IFADDR_RUNLOCK(); + CURVNET_RESTORE(); #endif cverf.lval[1] = ++create_verf; - CURVNET_RESTORE(); error = nfsrpc_create(dvp, cnp->cn_nameptr, cnp->cn_namelen, vap, cverf, fmode, cnp->cn_cred, cnp->cn_thread, &dnfsva, &nfsva, &nfhp, &attrflag, &dattrflag, NULL); |