- Don't check v_mount for NULL to determine if a vnode has been recycled.

Use the more appropriate VI_DOOMED flag instead.

Sponsored by:	Isilon Systems, Inc.
MFC After:	1 week
This commit is contained in:
jeff 2006-02-06 10:15:27 +00:00
parent 547663461e
commit 05c6b40c0d
4 changed files with 11 additions and 7 deletions

View File

@ -824,7 +824,7 @@ vn_fullpath1(struct thread *td, struct vnode *vp, struct vnode *rdir,
}
while (vp != rdir && vp != rootvnode) {
if (vp->v_vflag & VV_ROOT) {
if (vp->v_mount == NULL) { /* forced unmount */
if (vp->v_iflag & VI_DOOMED) { /* forced unmount */
error = EBADF;
break;
}

View File

@ -318,14 +318,16 @@ kern_fstatfs(struct thread *td, int fd, struct statfs *buf)
struct file *fp;
struct mount *mp;
struct statfs *sp, sb;
struct vnode *vp;
int error;
error = getvnode(td->td_proc->p_fd, fd, &fp);
if (error)
return (error);
mp = fp->f_vnode->v_mount;
vp = fp->f_vnode;
mp = vp->v_mount;
fdrop(fp, td);
if (mp == NULL)
if (vp->v_iflag & VI_DOOMED)
return (EBADF);
mtx_lock(&Giant);
#ifdef MAC

View File

@ -514,7 +514,7 @@ dirloop:
if ((dp->v_vflag & VV_ROOT) == 0 ||
(cnp->cn_flags & NOCROSSMOUNT))
break;
if (dp->v_mount == NULL) { /* forced unmount */
if (dp->v_iflag & VI_DOOMED) { /* forced unmount */
error = EBADF;
goto bad;
}
@ -659,7 +659,7 @@ unionlookup:
((cnp->cn_flags & FOLLOW) || trailing_slash ||
*ndp->ni_next == '/')) {
cnp->cn_flags |= ISSYMLINK;
if (dp->v_mount == NULL) {
if (dp->v_iflag & VI_DOOMED) {
/* We can't know whether the directory was mounted with
* NOSYMFOLLOW, so we can't follow safely. */
error = EBADF;

View File

@ -318,14 +318,16 @@ kern_fstatfs(struct thread *td, int fd, struct statfs *buf)
struct file *fp;
struct mount *mp;
struct statfs *sp, sb;
struct vnode *vp;
int error;
error = getvnode(td->td_proc->p_fd, fd, &fp);
if (error)
return (error);
mp = fp->f_vnode->v_mount;
vp = fp->f_vnode;
mp = vp->v_mount;
fdrop(fp, td);
if (mp == NULL)
if (vp->v_iflag & VI_DOOMED)
return (EBADF);
mtx_lock(&Giant);
#ifdef MAC