git: d711884e60bf - main - Remove unionfs_islocked()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 18 Apr 2023 01:35:44 UTC
The branch main has been updated by jah:
URL: https://cgit.FreeBSD.org/src/commit/?id=d711884e60bf55c9572e1882ed1b4645a4aa1ce6
commit d711884e60bf55c9572e1882ed1b4645a4aa1ce6
Author: Jason A. Harmening <jah@FreeBSD.org>
AuthorDate: 2023-01-16 21:50:10 +0000
Commit: Jason A. Harmening <jah@FreeBSD.org>
CommitDate: 2023-04-18 01:31:40 +0000
Remove unionfs_islocked()
The implementation is racy; if the unionfs vnode is not in fact
locked, vnode private data may be concurrently altered or freed.
Instead, simply rely upon the standard implementation to query the
v_vnlock field, which is type-stable and will reflect the correct
lower/upper vnode configuration for the unionfs node.
Tested by: pho
Reviewed by: kib, markj
Differential Revision: https://reviews.freebsd.org/D39272
---
sys/fs/unionfs/union_vnops.c | 20 +-------------------
1 file changed, 1 insertion(+), 19 deletions(-)
diff --git a/sys/fs/unionfs/union_vnops.c b/sys/fs/unionfs/union_vnops.c
index a0ff5c140e82..0da5ecb61bb2 100644
--- a/sys/fs/unionfs/union_vnops.c
+++ b/sys/fs/unionfs/union_vnops.c
@@ -1852,24 +1852,6 @@ unionfs_print(struct vop_print_args *ap)
return (0);
}
-static int
-unionfs_islocked(struct vop_islocked_args *ap)
-{
- struct unionfs_node *unp;
-
- KASSERT_UNIONFS_VNODE(ap->a_vp);
-
- unp = VTOUNIONFS(ap->a_vp);
- if (unp == NULL)
- return (vop_stdislocked(ap));
-
- if (unp->un_uppervp != NULLVP)
- return (VOP_ISLOCKED(unp->un_uppervp));
- if (unp->un_lowervp != NULLVP)
- return (VOP_ISLOCKED(unp->un_lowervp));
- return (vop_stdislocked(ap));
-}
-
static int
unionfs_get_llt_revlock(struct vnode *vp, int flags)
{
@@ -2790,7 +2772,7 @@ struct vop_vector unionfs_vnodeops = {
.vop_getwritemount = unionfs_getwritemount,
.vop_inactive = unionfs_inactive,
.vop_need_inactive = vop_stdneed_inactive,
- .vop_islocked = unionfs_islocked,
+ .vop_islocked = vop_stdislocked,
.vop_ioctl = unionfs_ioctl,
.vop_link = unionfs_link,
.vop_listextattr = unionfs_listextattr,