Module Name: src
Committed By: thorpej
Date: Sun Oct 10 23:46:23 UTC 2021
Modified Files:
src/sys/miscfs/genfs: genfs_vnops.c
src/sys/nfs: nfs_kq.c
Log Message:
Must hold kn->kn_kq->kq_lock to modify kn->kn_flags.
To generate a diff of this commit:
cvs rdiff -u -r1.212 -r1.213 src/sys/miscfs/genfs/genfs_vnops.c
cvs rdiff -u -r1.28 -r1.29 src/sys/nfs/nfs_kq.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/miscfs/genfs/genfs_vnops.c
diff -u src/sys/miscfs/genfs/genfs_vnops.c:1.212 src/sys/miscfs/genfs/genfs_vnops.c:1.213
--- src/sys/miscfs/genfs/genfs_vnops.c:1.212 Sun Sep 26 01:16:10 2021
+++ src/sys/miscfs/genfs/genfs_vnops.c Sun Oct 10 23:46:23 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: genfs_vnops.c,v 1.212 2021/09/26 01:16:10 thorpej Exp $ */
+/* $NetBSD: genfs_vnops.c,v 1.213 2021/10/10 23:46:23 thorpej Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.212 2021/09/26 01:16:10 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.213 2021/10/10 23:46:23 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -68,6 +68,7 @@ __KERNEL_RCSID(0, "$NetBSD: genfs_vnops.
#include <sys/namei.h>
#include <sys/vnode_impl.h>
#include <sys/fcntl.h>
+#include <sys/eventvar.h> /* XXX for kq->kq_lock */
#include <sys/kmem.h>
#include <sys/poll.h>
#include <sys/mman.h>
@@ -525,7 +526,9 @@ filt_genfsread(struct knote *kn, long hi
switch (hint) {
case NOTE_REVOKE:
KASSERT(mutex_owned(vp->v_interlock));
+ mutex_spin_enter(&kn->kn_kq->kq_lock);
kn->kn_flags |= (EV_EOF | EV_ONESHOT);
+ mutex_spin_exit(&kn->kn_kq->kq_lock);
return (1);
case 0:
mutex_enter(vp->v_interlock);
@@ -552,7 +555,9 @@ filt_genfswrite(struct knote *kn, long h
switch (hint) {
case NOTE_REVOKE:
KASSERT(mutex_owned(vp->v_interlock));
+ mutex_spin_enter(&kn->kn_kq->kq_lock);
kn->kn_flags |= (EV_EOF | EV_ONESHOT);
+ mutex_spin_exit(&kn->kn_kq->kq_lock);
return (1);
case 0:
mutex_enter(vp->v_interlock);
@@ -575,7 +580,9 @@ filt_genfsvnode(struct knote *kn, long h
switch (hint) {
case NOTE_REVOKE:
KASSERT(mutex_owned(vp->v_interlock));
+ mutex_spin_enter(&kn->kn_kq->kq_lock);
kn->kn_flags |= EV_EOF;
+ mutex_spin_exit(&kn->kn_kq->kq_lock);
if ((kn->kn_sfflags & hint) != 0)
kn->kn_fflags |= hint;
return (1);
Index: src/sys/nfs/nfs_kq.c
diff -u src/sys/nfs/nfs_kq.c:1.28 src/sys/nfs/nfs_kq.c:1.29
--- src/sys/nfs/nfs_kq.c:1.28 Sun Sep 26 01:16:10 2021
+++ src/sys/nfs/nfs_kq.c Sun Oct 10 23:46:22 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: nfs_kq.c,v 1.28 2021/09/26 01:16:10 thorpej Exp $ */
+/* $NetBSD: nfs_kq.c,v 1.29 2021/10/10 23:46:22 thorpej Exp $ */
/*-
* Copyright (c) 2002, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_kq.c,v 1.28 2021/09/26 01:16:10 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_kq.c,v 1.29 2021/10/10 23:46:22 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -43,6 +43,7 @@ __KERNEL_RCSID(0, "$NetBSD: nfs_kq.c,v 1
#include <sys/vnode.h>
#include <sys/unistd.h>
#include <sys/file.h>
+#include <sys/eventvar.h> /* XXX for kq->kq_lock */
#include <sys/kthread.h>
#include <nfs/rpcv2.h>
@@ -231,7 +232,9 @@ filt_nfsread(struct knote *kn, long hint
switch (hint) {
case NOTE_REVOKE:
KASSERT(mutex_owned(vp->v_interlock));
+ mutex_spin_enter(&kn->kn_kq->kq_lock);
kn->kn_flags |= (EV_EOF | EV_ONESHOT);
+ mutex_spin_exit(&kn->kn_kq->kq_lock);
return (1);
case 0:
mutex_enter(vp->v_interlock);
@@ -255,7 +258,9 @@ filt_nfsvnode(struct knote *kn, long hin
switch (hint) {
case NOTE_REVOKE:
KASSERT(mutex_owned(vp->v_interlock));
+ mutex_spin_enter(&kn->kn_kq->kq_lock);
kn->kn_flags |= EV_EOF;
+ mutex_spin_exit(&kn->kn_kq->kq_lock);
if ((kn->kn_sfflags & hint) != 0)
kn->kn_fflags |= hint;
return (1);