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 {
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to