FreeBSD Bugzilla – Attachment 239922 Details for
Bug 268971
panic: main-n260091-06b93ef8cda2 panicked (Fatal trap 12: page fault while in kernel mode)
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
fix done_namei so it is set true exactly when ni_statdir is set non-NULL
donenamei.patch (text/plain), 5.49 KB, created by
Rick Macklem
on 2023-02-05 16:30:22 UTC
(
hide
)
Description:
fix done_namei so it is set true exactly when ni_statdir is set non-NULL
Filename:
MIME Type:
Creator:
Rick Macklem
Created:
2023-02-05 16:30:22 UTC
Size:
5.49 KB
patch
obsolete
>--- sys/fs/nfs/nfs_var.h.donenamei 2023-02-05 07:54:05.896324000 -0800 >+++ sys/fs/nfs/nfs_var.h 2023-02-05 07:54:27.380657000 -0800 >@@ -687,7 +687,7 @@ int nfsvno_getfh(vnode_t, fhandle_t *, NFSPROC_T *); > int nfsvno_accchk(vnode_t, accmode_t, struct ucred *, > struct nfsexstuff *, NFSPROC_T *, int, int, u_int32_t *); > int nfsvno_namei(struct nfsrv_descript *, struct nameidata *, >- vnode_t, int, struct nfsexstuff *, vnode_t *); >+ vnode_t, int, struct nfsexstuff *, vnode_t *, bool *); > void nfsvno_setpathbuf(struct nameidata *, char **, u_long **); > void nfsvno_relpathbuf(struct nameidata *); > int nfsvno_readlink(vnode_t, struct ucred *, int, NFSPROC_T *, struct mbuf **, >--- sys/fs/nfsserver/nfs_nfsdserv.c.donenamei 2023-02-05 07:54:58.529675000 -0800 >+++ sys/fs/nfsserver/nfs_nfsdserv.c 2023-02-05 07:57:54.219708000 -0800 >@@ -620,7 +620,7 @@ nfsrvd_lookup(struct nfsrv_descript *nd, __unused int > goto out; > } > if (!nd->nd_repstat) { >- nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, &dirp); >+ nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, &dirp, NULL); > } else { > vrele(dp); > nfsvno_relpathbuf(&named); >@@ -1227,7 +1227,7 @@ nfsrvd_create(struct nfsrv_descript *nd, __unused int > goto out; > } > >- nd->nd_repstat = nfsvno_namei(nd, &named, dp, 1, exp, &dirp); >+ nd->nd_repstat = nfsvno_namei(nd, &named, dp, 1, exp, &dirp, NULL); > if (dirp) { > if (nd->nd_flag & ND_NFSV2) { > vrele(dirp); >@@ -1433,7 +1433,7 @@ nfsrvd_mknod(struct nfsrv_descript *nd, __unused int i > > if (vtyp == VDIR) > named.ni_cnd.cn_flags |= WILLBEDIR; >- nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, &dirp); >+ nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, &dirp, NULL); > if (nd->nd_repstat) { > if (dirp) { > if (nd->nd_flag & ND_NFSV3) >@@ -1556,7 +1556,7 @@ nfsrvd_remove(struct nfsrv_descript *nd, __unused int > goto out; > } > if (!nd->nd_repstat) { >- nd->nd_repstat = nfsvno_namei(nd, &named, dp, 1, exp, &dirp); >+ nd->nd_repstat = nfsvno_namei(nd, &named, dp, 1, exp, &dirp, NULL); > } else { > vput(dp); > nfsvno_relpathbuf(&named); >@@ -1730,7 +1730,7 @@ nfsrvd_rename(struct nfsrv_descript *nd, int isdgram, > /* > * Done parsing, now down to business. > */ >- nd->nd_repstat = nfsvno_namei(nd, &fromnd, dp, 0, exp, &fdirp); >+ nd->nd_repstat = nfsvno_namei(nd, &fromnd, dp, 0, exp, &fdirp, NULL); > if (nd->nd_repstat) { > if (nd->nd_flag & ND_NFSV3) { > nfsrv_wcc(nd, fdirfor_ret, &fdirfor, fdiraft_ret, >@@ -1747,7 +1747,7 @@ nfsrvd_rename(struct nfsrv_descript *nd, int isdgram, > } > if (fromnd.ni_vp->v_type == VDIR) > tond.ni_cnd.cn_flags |= WILLBEDIR; >- nd->nd_repstat = nfsvno_namei(nd, &tond, tdp, 0, &tnes, &tdirp); >+ nd->nd_repstat = nfsvno_namei(nd, &tond, tdp, 0, &tnes, &tdirp, NULL); > nd->nd_repstat = nfsvno_rename(&fromnd, &tond, nd->nd_repstat, > nd->nd_flag, nd->nd_cred, p); > if (fdirp) >@@ -1841,7 +1841,7 @@ nfsrvd_link(struct nfsrv_descript *nd, int isdgram, > } > if (!nd->nd_repstat) { > nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, &tnes, >- &dirp); >+ &dirp, NULL); > } else { > if (dp) > vrele(dp); >@@ -1916,7 +1916,7 @@ nfsrvd_symlink(struct nfsrv_descript *nd, __unused int > goto out; > } > if (!nd->nd_repstat) { >- nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, &dirp); >+ nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, &dirp, NULL); > } else { > vrele(dp); > nfsvno_relpathbuf(&named); >@@ -2039,7 +2039,7 @@ nfsrvd_mkdir(struct nfsrv_descript *nd, __unused int i > } > } > if (!nd->nd_repstat) { >- nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, &dirp); >+ nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, &dirp, NULL); > } else { > vrele(dp); > nfsvno_relpathbuf(&named); >@@ -3042,8 +3042,7 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int is > } > if (!nd->nd_repstat) { > nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, >- &dirp); >- done_namei = true; >+ &dirp, &done_namei); > } else { > vrele(dp); > nfsvno_relpathbuf(&named); >@@ -3704,7 +3703,7 @@ nfsrvd_secinfo(struct nfsrv_descript *nd, int isdgram, > goto out; > } > if (!nd->nd_repstat) { >- nd->nd_repstat = nfsvno_namei(nd, &named, dp, 1, exp, &dirp); >+ nd->nd_repstat = nfsvno_namei(nd, &named, dp, 1, exp, &dirp, NULL); > } else { > vput(dp); > nfsvno_relpathbuf(&named); >@@ -3842,7 +3841,7 @@ nfsrvd_secinfononame(struct nfsrv_descript *nd, int is > goto nfsmout; > } > if (nd->nd_repstat == 0) >- nd->nd_repstat = nfsvno_namei(nd, &named, dp, 1, exp, &dirp); >+ nd->nd_repstat = nfsvno_namei(nd, &named, dp, 1, exp, &dirp, NULL); > else > vput(dp); > if (dirp != NULL) >--- sys/fs/nfsserver/nfs_nfsdport.c.donenamei 2023-02-05 07:58:05.351529000 -0800 >+++ sys/fs/nfsserver/nfs_nfsdport.c 2023-02-05 08:12:58.728475000 -0800 >@@ -614,7 +614,7 @@ nfsvno_setattr(struct vnode *vp, struct nfsvattr *nvap > int > nfsvno_namei(struct nfsrv_descript *nd, struct nameidata *ndp, > struct vnode *dp, int islocked, struct nfsexstuff *exp, >- struct vnode **retdirp) >+ struct vnode **retdirp, bool *done_nameip) > { > struct componentname *cnp = &ndp->ni_cnd; > int i; >@@ -625,6 +625,8 @@ nfsvno_namei(struct nfsrv_descript *nd, struct nameida > char *cp; > > *retdirp = NULL; >+ if (done_nameip != NULL) >+ *done_nameip = false; > cnp->cn_nameptr = cnp->cn_pnbuf; > ndp->ni_lcf = 0; > /* >@@ -680,6 +682,8 @@ nfsvno_namei(struct nfsrv_descript *nd, struct nameida > * because lookup() will dereference ni_startdir. > */ > >+ if (done_nameip != NULL) >+ *done_nameip = true; > ndp->ni_startdir = dp; > ndp->ni_rootdir = rootvnode; > ndp->ni_topdir = NULL;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 268971
:
239485
|
239922
|
239938
|
239948
|
239962