Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Jan 2021 21:42:18 GMT
From:      Chuck Silvers <chs@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 11403bdeb415 - main - vfs: fix rangelock range in vn_rdwr() for IO_APPEND
Message-ID:  <202101072142.107LgIRl033419@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by chs:

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

commit 11403bdeb4158531af36bc7c51cbbba27deb69b1
Author:     Chuck Silvers <chs@FreeBSD.org>
AuthorDate: 2021-01-06 20:04:25 +0000
Commit:     Chuck Silvers <chs@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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202101072142.107LgIRl033419>