ufs_inactive(): stop hiding ERELOOKUP from ffs_truncate(), return it.
VFS should retry inactivation when possible, then. This should provide timely removal of unlinked unreferenced inodes. Reviewed by: chs, mckusick Tested by: pho MFC after: 2 weeks Sponsored by: The FreeBSD Foundation
This commit is contained in:
parent
b59a8e63d6
commit
013168db8c
@ -1493,13 +1493,14 @@ get_parent_vp(struct vnode *vp, struct mount *mp, ino_t inum, struct buf *bp,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do not drop vnode lock while inactivating. This
|
* Do not drop vnode lock while inactivating during
|
||||||
* would result in leaks of the VI flags and
|
* vunref. This would result in leaks of the VI flags
|
||||||
* reclaiming of non-truncated vnode. Instead,
|
* and reclaiming of non-truncated vnode. Instead,
|
||||||
* re-schedule inactivation hoping that we would be
|
* re-schedule inactivation hoping that we would be
|
||||||
* able to sync inode later.
|
* able to sync inode later.
|
||||||
*/
|
*/
|
||||||
if ((vp->v_iflag & VI_DOINGINACT) != 0) {
|
if ((vp->v_iflag & VI_DOINGINACT) != 0 &&
|
||||||
|
(vp->v_vflag & VV_UNREF) != 0) {
|
||||||
VI_LOCK(vp);
|
VI_LOCK(vp);
|
||||||
vp->v_iflag |= VI_OWEINACT;
|
vp->v_iflag |= VI_OWEINACT;
|
||||||
VI_UNLOCK(vp);
|
VI_UNLOCK(vp);
|
||||||
|
@ -212,8 +212,6 @@ out:
|
|||||||
vrecycle(vp);
|
vrecycle(vp);
|
||||||
if (mp != NULL)
|
if (mp != NULL)
|
||||||
vn_finished_secondary_write(mp);
|
vn_finished_secondary_write(mp);
|
||||||
if (error == ERELOOKUP)
|
|
||||||
error = 0;
|
|
||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user