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);

Reply via email to