diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2021-08-04 02:34:48 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2021-08-04 16:40:13 +0000 |
commit | 0ef5eee9d94162ac3cefa0bd8aedf1bfa6f87192 (patch) | |
tree | 4f13af9b81c7e2780227a883d3eaa6f787f2e7bf /sys/kern/vfs_syscalls.c | |
parent | 21d854658801f6ddb91de3a3c3384e90f5d920f2 (diff) | |
download | src-0ef5eee9d94162ac3cefa0bd8aedf1bfa6f87192.tar.gz src-0ef5eee9d94162ac3cefa0bd8aedf1bfa6f87192.zip |
Add vn_lktype_write()
and remove repetetive code that calculates vnode locking type for write.
Reviewed by: khng, markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D31405
Diffstat (limited to 'sys/kern/vfs_syscalls.c')
-rw-r--r-- | sys/kern/vfs_syscalls.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index 82629a4f5947..5701932a0163 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -3517,7 +3517,7 @@ kern_fsync(struct thread *td, int fd, bool fullsync) struct vnode *vp; struct mount *mp; struct file *fp; - int error, lock_flags; + int error; AUDIT_ARG_FD(fd); error = getvnode(td, fd, &cap_fsync_rights, &fp); @@ -3532,13 +3532,7 @@ retry: error = vn_start_write(vp, &mp, V_WAIT | PCATCH); if (error != 0) goto drop; - if (MNT_SHARED_WRITES(mp) || - ((mp == NULL) && MNT_SHARED_WRITES(vp->v_mount))) { - lock_flags = LK_SHARED; - } else { - lock_flags = LK_EXCLUSIVE; - } - vn_lock(vp, lock_flags | LK_RETRY); + vn_lock(vp, vn_lktype_write(mp, vp) | LK_RETRY); AUDIT_ARG_VNODE1(vp); if (vp->v_object != NULL) { VM_OBJECT_WLOCK(vp->v_object); |