summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2014-10-04 18:28:27 +0000
committerkib <kib@FreeBSD.org>2014-10-04 18:28:27 +0000
commit6be27132406b3f42ed23c97c6bfb63b7b5f2b4a3 (patch)
tree7e931adea84b04f34e64826a781eae166b03e83c /sys/kern
parent7fae36b14cb982f6eecccf2ce6e59d884fa4b55e (diff)
downloadFreeBSD-src-6be27132406b3f42ed23c97c6bfb63b7b5f2b4a3.zip
FreeBSD-src-6be27132406b3f42ed23c97c6bfb63b7b5f2b4a3.tar.gz
Add IO_RANGELOCKED flag for vn_rdwr(9), which specifies that vnode is
not locked, but range is. Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/vfs_vnops.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index 617bda0..65b5371 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -504,13 +504,16 @@ vn_rdwr(enum uio_rw rw, struct vnode *vp, void *base, int len, off_t offset,
error = 0;
if ((ioflg & IO_NODELOCKED) == 0) {
- if (rw == UIO_READ) {
- rl_cookie = vn_rangelock_rlock(vp, offset,
- offset + len);
- } else {
- rl_cookie = vn_rangelock_wlock(vp, offset,
- offset + len);
- }
+ if ((ioflg & IO_RANGELOCKED) == 0) {
+ if (rw == UIO_READ) {
+ rl_cookie = vn_rangelock_rlock(vp, offset,
+ offset + len);
+ } else {
+ rl_cookie = vn_rangelock_wlock(vp, offset,
+ offset + len);
+ }
+ } else
+ rl_cookie = NULL;
mp = NULL;
if (rw == UIO_WRITE) {
if (vp->v_type != VCHR &&
OpenPOWER on IntegriCloud