svn commit: r356314 - stable/12/sys/ufs/ffs
Konstantin Belousov
kib at FreeBSD.org
Fri Jan 3 01:21:16 UTC 2020
Author: kib
Date: Fri Jan 3 01:21:15 2020
New Revision: 356314
URL: https://svnweb.freebsd.org/changeset/base/356314
Log:
MFC r356126:
ufs: do not leave non-reclaimed vnodes with zero i_mode around.
MFC note: this should be a nop on stable/12.
Modified:
stable/12/sys/ufs/ffs/ffs_softdep.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/ufs/ffs/ffs_softdep.c
==============================================================================
--- stable/12/sys/ufs/ffs/ffs_softdep.c Fri Jan 3 00:31:48 2020 (r356313)
+++ stable/12/sys/ufs/ffs/ffs_softdep.c Fri Jan 3 01:21:15 2020 (r356314)
@@ -8043,7 +8043,9 @@ handle_complete_freeblocks(freeblks, flags)
flags, &vp, FFSV_FORCEINSMQ) != 0)
return (EBUSY);
ip = VTOI(vp);
- if (DIP(ip, i_modrev) == freeblks->fb_modrev) {
+ if (ip->i_mode == 0) {
+ vgone(vp);
+ } else if (DIP(ip, i_modrev) == freeblks->fb_modrev) {
DIP_SET(ip, i_blocks, DIP(ip, i_blocks) - spare);
ip->i_flag |= IN_CHANGE;
/*
@@ -9807,6 +9809,7 @@ handle_workitem_remove(dirrem, flags)
if (ffs_vgetf(mp, oldinum, flags, &vp, FFSV_FORCEINSMQ) != 0)
return (EBUSY);
ip = VTOI(vp);
+ MPASS(ip->i_mode != 0);
ACQUIRE_LOCK(ump);
if ((inodedep_lookup(mp, oldinum, 0, &inodedep)) == 0)
panic("handle_workitem_remove: lost inodedep");
@@ -12485,6 +12488,7 @@ restart:
VOP_UNLOCK(vp, 0);
error = ffs_vgetf(mp, parentino, LK_EXCLUSIVE,
&pvp, FFSV_FORCEINSMQ);
+ MPASS(VTOI(pvp)->i_mode != 0);
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
if (vp->v_iflag & VI_DOOMED) {
if (error == 0)
@@ -13127,6 +13131,7 @@ restart:
if ((error = ffs_vgetf(mp, inum, LK_EXCLUSIVE, &vp,
FFSV_FORCEINSMQ)))
break;
+ MPASS(VTOI(vp)->i_mode != 0);
error = flush_newblk_dep(vp, mp, 0);
/*
* If we still have the dependency we might need to
@@ -13191,6 +13196,7 @@ retry:
if ((error = ffs_vgetf(mp, inum, LK_EXCLUSIVE, &vp,
FFSV_FORCEINSMQ)))
break;
+ MPASS(VTOI(vp)->i_mode != 0);
error = ffs_update(vp, 1);
vput(vp);
if (error)
@@ -13765,6 +13771,7 @@ clear_remove(mp)
softdep_error("clear_remove: vget", error);
goto finish_write;
}
+ MPASS(VTOI(vp)->i_mode != 0);
if ((error = ffs_syncvnode(vp, MNT_NOWAIT, 0)))
softdep_error("clear_remove: fsync", error);
bo = &vp->v_bufobj;
@@ -13846,7 +13853,9 @@ clear_inodedeps(mp)
return;
}
vfs_unbusy(mp);
- if (ino == lastino) {
+ if (VTOI(vp)->i_mode == 0) {
+ vgone(vp);
+ } else if (ino == lastino) {
if ((error = ffs_syncvnode(vp, MNT_WAIT, 0)))
softdep_error("clear_inodedeps: fsync1", error);
} else {
More information about the svn-src-stable-12
mailing list