git: 013168db8cea - main - ufs_inactive(): stop hiding ERELOOKUP from ffs_truncate(), return it.

Konstantin Belousov kib at FreeBSD.org
Fri Feb 12 01:07:31 UTC 2021


The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=013168db8cea926c3dde1247d400d6bedf9a889d

commit 013168db8cea926c3dde1247d400d6bedf9a889d
Author:     Konstantin Belousov <kib at FreeBSD.org>
AuthorDate: 2021-01-30 19:18:22 +0000
Commit:     Konstantin Belousov <kib at FreeBSD.org>
CommitDate: 2021-02-12 01:02:21 +0000

    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
---
 sys/ufs/ffs/ffs_softdep.c | 9 +++++----
 sys/ufs/ufs/ufs_inode.c   | 2 --
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c
index 3cc76f9142c3..8c3ae9dd95fc 100644
--- a/sys/ufs/ffs/ffs_softdep.c
+++ b/sys/ufs/ffs/ffs_softdep.c
@@ -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);
diff --git a/sys/ufs/ufs/ufs_inode.c b/sys/ufs/ufs/ufs_inode.c
index 15bd8be448a9..46e4f8e54e41 100644
--- a/sys/ufs/ufs/ufs_inode.c
+++ b/sys/ufs/ufs/ufs_inode.c
@@ -212,8 +212,6 @@ out:
 		vrecycle(vp);
 	if (mp != NULL)
 		vn_finished_secondary_write(mp);
-	if (error == ERELOOKUP)
-		error = 0;
 	return (error);
 }
 


More information about the dev-commits-src-all mailing list