git: 8ecc621480bb - releng/13.0 - ffs: Add FFSV_REPLACE_DOOMED flag to ffs_vgetf()

Konstantin Belousov kib at FreeBSD.org
Thu Feb 25 20:52:10 UTC 2021


The branch releng/13.0 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=8ecc621480bb2e3676c940a63acc3a8ad61a75f5

commit 8ecc621480bb2e3676c940a63acc3a8ad61a75f5
Author:     Konstantin Belousov <kib at FreeBSD.org>
AuthorDate: 2021-01-26 11:35:21 +0000
Commit:     Konstantin Belousov <kib at FreeBSD.org>
CommitDate: 2021-02-25 20:47:42 +0000

    ffs: Add FFSV_REPLACE_DOOMED flag to ffs_vgetf()
    
    Approved by:    re (delphij, gjb)
    
    (cherry picked from commit f16c26b1c009fd0d87d07d3b1cf0d5078ad7f511)
---
 sys/ufs/ffs/ffs_extern.h | 5 +++--
 sys/ufs/ffs/ffs_vfsops.c | 7 +++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/sys/ufs/ffs/ffs_extern.h b/sys/ufs/ffs/ffs_extern.h
index d54df1deced9..bdb3f533e1ad 100644
--- a/sys/ufs/ffs/ffs_extern.h
+++ b/sys/ufs/ffs/ffs_extern.h
@@ -122,8 +122,9 @@ int	ffs_breadz(struct ufsmount *, struct vnode *, daddr_t, daddr_t, int,
 /*
  * Flags to ffs_vgetf
  */
-#define	FFSV_FORCEINSMQ	0x0001
-#define	FFSV_REPLACE	0x0002
+#define	FFSV_FORCEINSMQ		0x0001
+#define	FFSV_REPLACE		0x0002
+#define	FFSV_REPLACE_DOOMED	0x0004
 
 /*
  * Flags to ffs_reload
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
index 04afbfd4d6e4..91b8c30f0919 100644
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -1954,13 +1954,16 @@ ffs_vgetf(mp, ino, flags, vpp, ffs_flags)
 	daddr_t dbn;
 	int error;
 
-	MPASS((ffs_flags & FFSV_REPLACE) == 0 || (flags & LK_EXCLUSIVE) != 0);
+	MPASS((ffs_flags & (FFSV_REPLACE | FFSV_REPLACE_DOOMED)) == 0 ||
+	    (flags & LK_EXCLUSIVE) != 0);
 
 	error = vfs_hash_get(mp, ino, flags, curthread, vpp, NULL, NULL);
 	if (error != 0)
 		return (error);
 	if (*vpp != NULL) {
-		if ((ffs_flags & FFSV_REPLACE) == 0)
+		if ((ffs_flags & FFSV_REPLACE) == 0 ||
+		    ((ffs_flags & FFSV_REPLACE_DOOMED) == 0 ||
+		    !VN_IS_DOOMED(*vpp)))
 			return (0);
 		vgone(*vpp);
 		vput(*vpp);


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