Module Name: src Committed By: christos Date: Tue Jul 11 23:26:41 UTC 2023
Modified Files: src/sys/dev: dksubr.c Log Message: Move the rnd_add_uint32 outside the lock and get rid of dk_done1() suggested by riastradh@ To generate a diff of this commit: cvs rdiff -u -r1.113 -r1.114 src/sys/dev/dksubr.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/dksubr.c diff -u src/sys/dev/dksubr.c:1.113 src/sys/dev/dksubr.c:1.114 --- src/sys/dev/dksubr.c:1.113 Wed Apr 14 20:32:50 2021 +++ src/sys/dev/dksubr.c Tue Jul 11 19:26:41 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: dksubr.c,v 1.113 2021/04/15 00:32:50 rin Exp $ */ +/* $NetBSD: dksubr.c,v 1.114 2023/07/11 23:26:41 christos Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 1999, 2002, 2008 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dksubr.c,v 1.113 2021/04/15 00:32:50 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dksubr.c,v 1.114 2023/07/11 23:26:41 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -77,7 +77,6 @@ static int dk_subr_modcmd(modcmd_t, void static void dk_makedisklabel(struct dk_softc *); static int dk_translate(struct dk_softc *, struct buf *); -static void dk_done1(struct dk_softc *, struct buf *, bool); void dk_init(struct dk_softc *dksc, device_t dev, int dtype) @@ -442,7 +441,9 @@ dk_start(struct dk_softc *dksc, struct b if (error != 0) { bp->b_error = error; bp->b_resid = bp->b_bcount; - dk_done1(dksc, bp, false); + mutex_exit(&dksc->sc_iolock); + dk_done(dksc, bp); + mutex_enter(&dksc->sc_iolock); } bp = bufq_get(dksc->sc_bufq); @@ -454,8 +455,8 @@ done: mutex_exit(&dksc->sc_iolock); } -static void -dk_done1(struct dk_softc *dksc, struct buf *bp, bool lock) +void +dk_done(struct dk_softc *dksc, struct buf *bp) { struct disk *dk = &dksc->sc_dkdev; @@ -467,25 +468,17 @@ dk_done1(struct dk_softc *dksc, struct b printf("\n"); } - if (lock) - mutex_enter(&dksc->sc_iolock); + mutex_enter(&dksc->sc_iolock); disk_unbusy(dk, bp->b_bcount - bp->b_resid, (bp->b_flags & B_READ)); + mutex_exit(&dksc->sc_iolock); if ((dksc->sc_flags & DKF_NO_RND) == 0) rnd_add_uint32(&dksc->sc_rnd_source, bp->b_rawblkno); - if (lock) - mutex_exit(&dksc->sc_iolock); biodone(bp); } void -dk_done(struct dk_softc *dksc, struct buf *bp) -{ - dk_done1(dksc, bp, true); -} - -void dk_drain(struct dk_softc *dksc) { struct buf *bp;