aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/vfs_syscalls.c
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2021-08-04 02:34:48 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2021-08-04 16:40:13 +0000
commit0ef5eee9d94162ac3cefa0bd8aedf1bfa6f87192 (patch)
tree4f13af9b81c7e2780227a883d3eaa6f787f2e7bf /sys/kern/vfs_syscalls.c
parent21d854658801f6ddb91de3a3c3384e90f5d920f2 (diff)
downloadsrc-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.c10
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);