Module Name:    src
Committed By:   ad
Date:           Fri Jan 17 19:31:31 UTC 2020

Modified Files:
        src/sys/dev: cgd.c vnd.c
        src/sys/dev/ata: ld_ataraid.c

Log Message:
Acquire kernel_lock in the bp->b_iodone callback.


To generate a diff of this commit:
cvs rdiff -u -r1.118 -r1.119 src/sys/dev/cgd.c
cvs rdiff -u -r1.272 -r1.273 src/sys/dev/vnd.c
cvs rdiff -u -r1.49 -r1.50 src/sys/dev/ata/ld_ataraid.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/dev/cgd.c
diff -u src/sys/dev/cgd.c:1.118 src/sys/dev/cgd.c:1.119
--- src/sys/dev/cgd.c:1.118	Sat Dec 14 16:58:38 2019
+++ src/sys/dev/cgd.c	Fri Jan 17 19:31:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: cgd.c,v 1.118 2019/12/14 16:58:38 riastradh Exp $ */
+/* $NetBSD: cgd.c,v 1.119 2020/01/17 19:31:30 ad Exp $ */
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.118 2019/12/14 16:58:38 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.119 2020/01/17 19:31:30 ad Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -591,8 +591,10 @@ cgdiodone(struct buf *nbp)
 	if (obp->b_error != 0)
 		obp->b_resid = obp->b_bcount;
 
+	KERNEL_LOCK(1, NULL);		/* XXXSMP */
 	dk_done(dksc, obp);
 	dk_start(dksc, NULL);
+	KERNEL_UNLOCK_ONE(NULL);	/* XXXSMP */
 }
 
 static int

Index: src/sys/dev/vnd.c
diff -u src/sys/dev/vnd.c:1.272 src/sys/dev/vnd.c:1.273
--- src/sys/dev/vnd.c:1.272	Fri Mar  1 11:06:56 2019
+++ src/sys/dev/vnd.c	Fri Jan 17 19:31:30 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: vnd.c,v 1.272 2019/03/01 11:06:56 pgoyette Exp $	*/
+/*	$NetBSD: vnd.c,v 1.273 2020/01/17 19:31:30 ad Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2008 The NetBSD Foundation, Inc.
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.272 2019/03/01 11:06:56 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.273 2020/01/17 19:31:30 ad Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_vnd.h"
@@ -968,6 +968,7 @@ vndiodone(struct buf *bp)
 	struct buf *obp = bp->b_private;
 	int s = splbio();
 
+	KERNEL_LOCK(1, NULL);		/* XXXSMP */
 	KASSERT(&vnx->vx_buf == bp);
 	KASSERT(vnd->sc_active > 0);
 #ifdef DEBUG
@@ -982,6 +983,7 @@ vndiodone(struct buf *bp)
 	if (vnd->sc_active == 0) {
 		wakeup(&vnd->sc_tab);
 	}
+	KERNEL_UNLOCK_ONE(NULL);	/* XXXSMP */
 	splx(s);
 	obp->b_error = bp->b_error;
 	obp->b_resid = bp->b_resid;

Index: src/sys/dev/ata/ld_ataraid.c
diff -u src/sys/dev/ata/ld_ataraid.c:1.49 src/sys/dev/ata/ld_ataraid.c:1.50
--- src/sys/dev/ata/ld_ataraid.c:1.49	Sun Jan 27 02:08:41 2019
+++ src/sys/dev/ata/ld_ataraid.c	Fri Jan 17 19:31:31 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: ld_ataraid.c,v 1.49 2019/01/27 02:08:41 pgoyette Exp $ */
+/*	$NetBSD: ld_ataraid.c,v 1.50 2020/01/17 19:31:31 ad Exp $ */
 
 /*
  * Copyright (c) 2003 Wasabi Systems, Inc.
@@ -47,7 +47,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ld_ataraid.c,v 1.49 2019/01/27 02:08:41 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ld_ataraid.c,v 1.50 2020/01/17 19:31:31 ad Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "bio.h"
@@ -500,6 +500,7 @@ ld_ataraid_iodone_raid0(struct buf *vbp)
 	int s, iodone;
 
 	s = splbio();
+	KERNEL_LOCK(1, NULL);		/* XXXSMP */
 
 	iodone = cbp->cb_flags & CBUF_IODONE;
 	other_cbp = cbp->cb_other;
@@ -571,6 +572,7 @@ ld_ataraid_iodone_raid0(struct buf *vbp)
 		lddone(&sc->sc_ld, bp);
 
 out:
+	KERNEL_UNLOCK_ONE(NULL);	/* XXXSMP */
 	splx(s);
 }
 

Reply via email to