diff options
author | Jason A. Harmening <jah@FreeBSD.org> | 2023-12-24 04:42:28 +0000 |
---|---|---|
committer | Jason A. Harmening <jah@FreeBSD.org> | 2024-02-18 15:18:07 +0000 |
commit | 2656fc29be8b0fc1cd9e64ed52aa0a61fe87744c (patch) | |
tree | c55c03cef3bb0617e5f523addacf56bb1eab1cc3 /sys/fs | |
parent | 9530182e371dee382b76d8594f65633a304b396f (diff) | |
download | src-2656fc29be8b0fc1cd9e64ed52aa0a61fe87744c.tar.gz src-2656fc29be8b0fc1cd9e64ed52aa0a61fe87744c.zip |
Diffstat (limited to 'sys/fs')
-rw-r--r-- | sys/fs/unionfs/union_vfsops.c | 3 | ||||
-rw-r--r-- | sys/fs/unionfs/union_vnops.c | 8 |
2 files changed, 10 insertions, 1 deletions
diff --git a/sys/fs/unionfs/union_vfsops.c b/sys/fs/unionfs/union_vfsops.c index 8635600549b1..cb55c2dd6474 100644 --- a/sys/fs/unionfs/union_vfsops.c +++ b/sys/fs/unionfs/union_vfsops.c @@ -348,7 +348,8 @@ unionfs_domount(struct mount *mp) if ((ump->um_lowermp->mnt_flag & MNT_LOCAL) != 0 && (ump->um_uppermp->mnt_flag & MNT_LOCAL) != 0) mp->mnt_flag |= MNT_LOCAL; - mp->mnt_kern_flag |= MNTK_NOMSYNC | MNTK_UNIONFS; + mp->mnt_kern_flag |= MNTK_NOMSYNC | MNTK_UNIONFS | + (ump->um_uppermp->mnt_kern_flag & MNTK_SHARED_WRITES); MNT_IUNLOCK(mp); /* diff --git a/sys/fs/unionfs/union_vnops.c b/sys/fs/unionfs/union_vnops.c index cb2bed925399..3ea427b5b53c 100644 --- a/sys/fs/unionfs/union_vnops.c +++ b/sys/fs/unionfs/union_vnops.c @@ -998,14 +998,22 @@ unionfs_fsync(struct vop_fsync_args *ap) struct unionfs_node *unp; struct unionfs_node_status *unsp; struct vnode *ovp; + enum unionfs_lkupgrade lkstatus; KASSERT_UNIONFS_VNODE(ap->a_vp); unp = VTOUNIONFS(ap->a_vp); + lkstatus = unionfs_upgrade_lock(ap->a_vp); + if (lkstatus == UNIONFS_LKUPGRADE_DOOMED) { + unionfs_downgrade_lock(ap->a_vp, lkstatus); + return (ENOENT); + } unionfs_get_node_status(unp, ap->a_td, &unsp); ovp = (unsp->uns_upper_opencnt ? unp->un_uppervp : unp->un_lowervp); unionfs_tryrem_node_status(unp, unsp); + unionfs_downgrade_lock(ap->a_vp, lkstatus); + if (ovp == NULLVP) return (EBADF); |