summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2006-02-06 10:14:12 +0000
committerjeff <jeff@FreeBSD.org>2006-02-06 10:14:12 +0000
commit547663461ebb0b04e7a6f950dc04ee2aa11cda73 (patch)
treeaf44e3a641357e22bcb1466b0f381780086edea0 /sys/vm
parent2f3a978b92227c86d7e01c9b73037a9508d770c6 (diff)
downloadFreeBSD-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.c20
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;
OpenPOWER on IntegriCloud