Date: Fri, 3 Jan 2020 01:21:16 +0000 (UTC) From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r356314 - stable/12/sys/ufs/ffs Message-ID: <202001030121.0031LGDI017522@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202001030121.0031LGDI017522>