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