diff options
author | jeff <jeff@FreeBSD.org> | 2006-02-06 10:14:12 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2006-02-06 10:14:12 +0000 |
commit | 547663461ebb0b04e7a6f950dc04ee2aa11cda73 (patch) | |
tree | af44e3a641357e22bcb1466b0f381780086edea0 /sys/vm | |
parent | 2f3a978b92227c86d7e01c9b73037a9508d770c6 (diff) | |
download | FreeBSD-src-547663461ebb0b04e7a6f950dc04ee2aa11cda73.zip FreeBSD-src-547663461ebb0b04e7a6f950dc04ee2aa11cda73.tar.gz |
- Fix silly VI locking that is used to check a single flag. The vnode
lock also protects this flag so it is not necessary.
- Don't rely on v_mount to detect whether or not we've been recycled, use
the more appropriate VI_DOOMED instead.
Sponsored by: Isilon Systems, Inc.
MFC After: 1 week
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/vnode_pager.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c index 2ba1de7..aafdea1 100644 --- a/sys/vm/vnode_pager.c +++ b/sys/vm/vnode_pager.c @@ -282,21 +282,13 @@ vnode_pager_haspage(object, pindex, before, after) * If no vp or vp is doomed or marked transparent to VM, we do not * have the page. */ - if (vp == NULL) - return FALSE; - - VI_LOCK(vp); - if (vp->v_iflag & VI_DOOMED) { - VI_UNLOCK(vp); + if (vp == NULL || vp->v_iflag & VI_DOOMED) return FALSE; - } - VI_UNLOCK(vp); /* - * If filesystem no longer mounted or offset beyond end of file we do + * If the offset is beyond end of file we do * not have the page. */ - if ((vp->v_mount == NULL) || - (IDX_TO_OFF(pindex) >= object->un_pager.vnp.vnp_size)) + if (IDX_TO_OFF(pindex) >= object->un_pager.vnp.vnp_size) return FALSE; bsize = vp->v_mount->mnt_stat.f_iosize; @@ -461,7 +453,7 @@ vnode_pager_addr(vp, address, run) if (address < 0) return -1; - if (vp->v_mount == NULL) + if (vp->v_iflag & VI_DOOMED) return -1; bsize = vp->v_mount->mnt_stat.f_iosize; @@ -502,7 +494,7 @@ vnode_pager_input_smlfs(object, m) int error = 0; vp = object->handle; - if (vp->v_mount == NULL) + if (vp->v_iflag & VI_DOOMED) return VM_PAGER_BAD; bsize = vp->v_mount->mnt_stat.f_iosize; @@ -716,7 +708,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) KASSERT(vp->v_type != VCHR && vp->v_type != VBLK, ("vnode_pager_generic_getpages does not support devices")); - if (vp->v_mount == NULL) + if (vp->v_iflag & VI_DOOMED) return VM_PAGER_BAD; bsize = vp->v_mount->mnt_stat.f_iosize; |