mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-15 10:17:20 +00:00
- 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
This commit is contained in:
parent
36a52c3cae
commit
b73f64c484
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=155384
@ -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)
|
||||
if (vp == NULL || vp->v_iflag & VI_DOOMED)
|
||||
return FALSE;
|
||||
|
||||
VI_LOCK(vp);
|
||||
if (vp->v_iflag & VI_DOOMED) {
|
||||
VI_UNLOCK(vp);
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user