summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2006-02-06 10:15:27 +0000
committerjeff <jeff@FreeBSD.org>2006-02-06 10:15:27 +0000
commit05c6b40c0d429243e6e525bbfe4fd2e75fc84a69 (patch)
treec19d74eaa247a44cddc34c233a35de9994cbf8c8 /sys/kern
parent547663461ebb0b04e7a6f950dc04ee2aa11cda73 (diff)
downloadFreeBSD-src-05c6b40c0d429243e6e525bbfe4fd2e75fc84a69.zip
FreeBSD-src-05c6b40c0d429243e6e525bbfe4fd2e75fc84a69.tar.gz
- 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
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/vfs_cache.c2
-rw-r--r--sys/kern/vfs_extattr.c6
-rw-r--r--sys/kern/vfs_lookup.c4
-rw-r--r--sys/kern/vfs_syscalls.c6
4 files changed, 11 insertions, 7 deletions
diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c
index 4dfbe93..dbb07f9 100644
--- a/sys/kern/vfs_cache.c
+++ b/sys/kern/vfs_cache.c
@@ -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;
}
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c
index 035ba92..dcd3696 100644
--- a/sys/kern/vfs_extattr.c
+++ b/sys/kern/vfs_extattr.c
@@ -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
diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c
index de8be72..4d47123 100644
--- a/sys/kern/vfs_lookup.c
+++ b/sys/kern/vfs_lookup.c
@@ -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;
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 035ba92..dcd3696 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -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
OpenPOWER on IntegriCloud