mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-04 05:58:57 +00:00
VFS: update VOP_FSYNC() debug check to reflect actual locking policy
Shared vs. exclusive locking is determined not by MNT_EXTENDED_SHARED but by MNT_SHARED_WRITES (although there are several places that ignore this and simply always use an exclusive lock). Also add a comment on the possible difference between VOP_GETWRITEMOUNT(vp) and vp->v_mount on this path. Found by local testing of unionfs atop ZFS with DEBUG_VFS_LOCKS. MFC after: 2 weeks Reviewed by: kib, olce Differential Revision: https://reviews.freebsd.org/D43816
This commit is contained in:
parent
cc3ec9f759
commit
9530182e37
@ -5830,7 +5830,22 @@ vop_fsync_debugprepost(struct vnode *vp, const char *name)
|
||||
{
|
||||
if (vp->v_type == VCHR)
|
||||
;
|
||||
else if (MNT_EXTENDED_SHARED(vp->v_mount))
|
||||
/*
|
||||
* The shared vs. exclusive locking policy for fsync()
|
||||
* is actually determined by vp's write mount as indicated
|
||||
* by VOP_GETWRITEMOUNT(), which for stacked filesystems
|
||||
* may not be the same as vp->v_mount. However, if the
|
||||
* underlying filesystem which really handles the fsync()
|
||||
* supports shared locking, the stacked filesystem must also
|
||||
* be prepared for its VOP_FSYNC() operation to be called
|
||||
* with only a shared lock. On the other hand, if the
|
||||
* stacked filesystem claims support for shared write
|
||||
* locking but the underlying filesystem does not, and the
|
||||
* caller incorrectly uses a shared lock, this condition
|
||||
* should still be caught when the stacked filesystem
|
||||
* invokes VOP_FSYNC() on the underlying filesystem.
|
||||
*/
|
||||
else if (MNT_SHARED_WRITES(vp->v_mount))
|
||||
ASSERT_VOP_LOCKED(vp, name);
|
||||
else
|
||||
ASSERT_VOP_ELOCKED(vp, name);
|
||||
|
Loading…
Reference in New Issue
Block a user