git: 11403bdeb415 - main - vfs: fix rangelock range in vn_rdwr() for IO_APPEND

Chuck Silvers chs at FreeBSD.org
Thu Jan 7 21:42:18 UTC 2021


The branch main has been updated by chs:

URL: https://cgit.FreeBSD.org/src/commit/?id=11403bdeb4158531af36bc7c51cbbba27deb69b1

commit 11403bdeb4158531af36bc7c51cbbba27deb69b1
Author:     Chuck Silvers <chs at FreeBSD.org>
AuthorDate: 2021-01-06 20:04:25 +0000
Commit:     Chuck Silvers <chs at FreeBSD.org>
CommitDate: 2021-01-07 21:37:35 +0000

    vfs: fix rangelock range in vn_rdwr() for IO_APPEND
    
    vn_rdwr() must lock the entire file range for IO_APPEND
    just like vn_io_fault() does for O_APPEND.
    
    Reviewed by:    kib, imp, mckusick
    Sponsored by:   Netflix
    Differential Revision:  https://reviews.freebsd.org/D28008
---
 sys/kern/vfs_vnops.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index f69115047eba..2ca2cf124c23 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -584,6 +584,8 @@ vn_rdwr(enum uio_rw rw, struct vnode *vp, void *base, int len, off_t offset,
 			if (rw == UIO_READ) {
 				rl_cookie = vn_rangelock_rlock(vp, offset,
 				    offset + len);
+			} else if ((ioflg & IO_APPEND) != 0) {
+				rl_cookie = vn_rangelock_wlock(vp, 0, OFF_MAX);
 			} else {
 				rl_cookie = vn_rangelock_wlock(vp, offset,
 				    offset + len);


More information about the dev-commits-src-all mailing list