mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-15 10:17:20 +00:00
- Remove the backtrace() call from the *_vinvalbuf() functions. Thanks to a
stack trace supplied by phk, I now understand what's going on here. The check for VI_XLOCK stops us from calling vinvalbuf once the vnode has been partially torn down in vclean(). It is not clear that this would cause a problem. Document this in nfs_bio.c, which is where the other two filesystems copied this code from.
This commit is contained in:
parent
4566e7a433
commit
8b5905a47d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=120730
@ -607,12 +607,8 @@ nwfs_vinvalbuf(vp, flags, cred, td, intrflg)
|
||||
/* struct nwmount *nmp = VTONWFS(vp);*/
|
||||
int error = 0, slpflag, slptimeo;
|
||||
|
||||
if (vp->v_iflag & VI_XLOCK) {
|
||||
#ifdef INVARIANTS
|
||||
backtrace();
|
||||
#endif
|
||||
if (vp->v_iflag & VI_XLOCK)
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (intrflg) {
|
||||
slpflag = PCATCH;
|
||||
|
@ -679,12 +679,8 @@ smbfs_vinvalbuf(vp, flags, cred, td, intrflg)
|
||||
struct smbnode *np = VTOSMB(vp);
|
||||
int error = 0, slpflag, slptimeo;
|
||||
|
||||
if (vp->v_iflag & VI_XLOCK) {
|
||||
#ifdef INVARIANTS
|
||||
backtrace();
|
||||
#endif
|
||||
if (vp->v_iflag & VI_XLOCK)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (intrflg) {
|
||||
slpflag = PCATCH;
|
||||
|
@ -1067,12 +1067,13 @@ nfs_vinvalbuf(struct vnode *vp, int flags, struct ucred *cred,
|
||||
|
||||
ASSERT_VOP_LOCKED(vp, "nfs_vinvalbuf");
|
||||
|
||||
if (vp->v_iflag & VI_XLOCK) {
|
||||
#ifdef INVARIANTS
|
||||
backtrace();
|
||||
#endif
|
||||
/*
|
||||
* XXX This check stops us from needlessly doing a vinvalbuf when
|
||||
* being called through vclean(). It is not clear that this is
|
||||
* unsafe.
|
||||
*/
|
||||
if (vp->v_iflag & VI_XLOCK)
|
||||
return (0);
|
||||
}
|
||||
|
||||
if ((nmp->nm_flag & NFSMNT_INT) == 0)
|
||||
intrflg = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user