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:
Konstantin Belousov 2021-01-30 21:18:22 +02:00
parent b59a8e63d6
commit 013168db8c
2 changed files with 5 additions and 6 deletions

View File

@ -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);

View File

@ -212,8 +212,6 @@ out:
vrecycle(vp);
if (mp != NULL)
vn_finished_secondary_write(mp);
if (error == ERELOOKUP)
error = 0;
return (error);
}