summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_vnops.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2002-08-22 07:26:18 +0000
committerjeff <jeff@FreeBSD.org>2002-08-22 07:26:18 +0000
commit120149c075e60c80ddba7f60e2a0d4b9eb1e3ce4 (patch)
tree702809da8ec87e8d9c5f9201d36ab851ab3f23b0 /sys/kern/vfs_vnops.c
parentabe4a3ae2ec7800a6ed1c04e4c8cbceb0a340632 (diff)
downloadFreeBSD-src-120149c075e60c80ddba7f60e2a0d4b9eb1e3ce4.zip
FreeBSD-src-120149c075e60c80ddba7f60e2a0d4b9eb1e3ce4.tar.gz
- Return two shared locks to exclusive locks. This was premature.
- Document the problems that prevent us from using shared locks.
Diffstat (limited to 'sys/kern/vfs_vnops.c')
-rw-r--r--sys/kern/vfs_vnops.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index 3f00fda..5be404b 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -385,7 +385,12 @@ vn_rdwr(rw, vp, base, len, offset, segflg, ioflg, active_cred, file_cred,
return (error);
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
} else {
- vn_lock(vp, LK_SHARED | LK_RETRY, td);
+ /*
+ * XXX This should be LK_SHARED but I don't trust VFS
+ * enough to leave it like that until it has been
+ * reviewed further.
+ */
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
}
}
@@ -500,7 +505,11 @@ vn_read(fp, uio, active_cred, flags, td)
if (fp->f_flag & O_DIRECT)
ioflag |= IO_DIRECT;
VOP_LEASE(vp, td, fp->f_cred, LEASE_READ);
- vn_lock(vp, LK_SHARED | LK_NOPAUSE | LK_RETRY, td);
+ /*
+ * According to McKusick the vn lock is protecting f_offset here.
+ * Once this field has it's own lock we can acquire this shared.
+ */
+ vn_lock(vp, LK_EXCLUSIVE | LK_NOPAUSE | LK_RETRY, td);
if ((flags & FOF_OFFSET) == 0)
uio->uio_offset = fp->f_offset;
OpenPOWER on IntegriCloud