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
|
||||
* would result in leaks of the VI flags and
|
||||
* reclaiming of non-truncated vnode. Instead,
|
||||
* Do not drop vnode lock while inactivating during
|
||||
* vunref. This would result in leaks of the VI flags
|
||||
* and reclaiming of non-truncated vnode. Instead,
|
||||
* re-schedule inactivation hoping that we would be
|
||||
* 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);
|
||||
vp->v_iflag |= VI_OWEINACT;
|
||||
VI_UNLOCK(vp);
|
||||
|
@ -212,8 +212,6 @@ out:
|
||||
vrecycle(vp);
|
||||
if (mp != NULL)
|
||||
vn_finished_secondary_write(mp);
|
||||
if (error == ERELOOKUP)
|
||||
error = 0;
|
||||
return (error);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user