When returning error from msdosfs_lookup(), make sure that *vpp is NULL.

lookup() KASSERTs this condition.

Reported and tested by:	pho
MFC after:	3 weeks
This commit is contained in:
Konstantin Belousov 2010-03-03 21:59:45 +00:00
parent 75b2bd679b
commit 84caee6bbb
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=204675

View File

@ -125,14 +125,14 @@ msdosfs_lookup_(struct vnode *vdp, struct vnode **vpp,
#endif
dp = VTODE(vdp);
pmp = dp->de_pmp;
if (vpp != NULL)
*vpp = NULL;
#ifdef MSDOSFS_DEBUG
printf("msdosfs_lookup(): vdp %p, dp %p, Attr %02x\n",
vdp, dp, dp->de_Attributes);
#endif
restart:
if (vpp != NULL)
*vpp = NULL;
/*
* If they are going after the . or .. entry in the root directory,
* they won't find it. DOS filesystems don't have them in the root
@ -525,8 +525,10 @@ msdosfs_lookup_(struct vnode *vdp, struct vnode **vpp,
pdp = vdp;
if (flags & ISDOTDOT) {
error = msdosfs_deget_dotdot(pdp, cluster, blkoff, vpp);
if (error)
if (error) {
*vpp = NULL;
return (error);
}
/*
* Recheck that ".." still points to the inode we
* looked up before pdp lock was dropped.
@ -534,6 +536,7 @@ msdosfs_lookup_(struct vnode *vdp, struct vnode **vpp,
error = msdosfs_lookup_(pdp, NULL, cnp, &inode1);
if (error) {
vput(*vpp);
*vpp = NULL;
return (error);
}
if (VTODE(*vpp)->de_inode != inode1) {