git: 356e698011b2 - main - unionfs(): destroy root vnode if upper registration fails
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 07 May 2023 23:52:04 UTC
The branch main has been updated by jah:
URL: https://cgit.FreeBSD.org/src/commit/?id=356e698011b20ccba9c0a3f211e2a7761490875c
commit 356e698011b20ccba9c0a3f211e2a7761490875c
Author: Jason A. Harmening <jah@FreeBSD.org>
AuthorDate: 2023-03-26 01:50:55 +0000
Commit: Jason A. Harmening <jah@FreeBSD.org>
CommitDate: 2023-05-07 23:30:43 +0000
unionfs(): destroy root vnode if upper registration fails
If unionfs_domount() fails, the mount path will not call VFS_UNMOUNT()
to clean up after it. If this failure happens during upper vnode
registration, the unionfs root vnode will already be allocated.
vflush() it in order to prevent the vnode from being leaked and the
subsequent vfs_mount_destroy() call from getting stuck waiting for
the mountpoint reference count to drain.
Reviewed by: kib, markj
Tested by: pho
Differential Revision: https://reviews.freebsd.org/D39767
---
sys/fs/unionfs/union_vfsops.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/sys/fs/unionfs/union_vfsops.c b/sys/fs/unionfs/union_vfsops.c
index cd6c7bd90655..9ef239aaad1d 100644
--- a/sys/fs/unionfs/union_vfsops.c
+++ b/sys/fs/unionfs/union_vfsops.c
@@ -318,6 +318,7 @@ unionfs_domount(struct mount *mp)
vfs_unregister_upper(lowermp, &ump->um_lower_link);
if (uppermp != NULL)
vfs_unregister_upper(uppermp, &ump->um_upper_link);
+ vflush(mp, 1, FORCECLOSE, curthread);
free(ump, M_UNIONFSMNT);
mp->mnt_data = NULL;
return (ENOENT);