Wed Mar 11 13:48:46 2020 UTC ()
Don't wait for data buffer.


(mlelstv)
diff -r1.122 -r1.123 src/sys/dev/cgd.c

cvs diff -r1.122 -r1.123 src/sys/dev/cgd.c (expand / switch to unified diff)

--- src/sys/dev/cgd.c 2020/03/09 08:33:15 1.122
+++ src/sys/dev/cgd.c 2020/03/11 13:48:45 1.123
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: cgd.c,v 1.122 2020/03/09 08:33:15 mlelstv Exp $ */ 1/* $NetBSD: cgd.c,v 1.123 2020/03/11 13:48:45 mlelstv Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 2002 The NetBSD Foundation, Inc. 4 * Copyright (c) 2002 The NetBSD Foundation, Inc.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to The NetBSD Foundation 7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Roland C. Dowdeswell. 8 * by Roland C. Dowdeswell.
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions 11 * modification, are permitted provided that the following conditions
12 * are met: 12 * are met:
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
@@ -20,27 +20,27 @@ @@ -20,27 +20,27 @@
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE. 29 * POSSIBILITY OF SUCH DAMAGE.
30 */ 30 */
31 31
32#include <sys/cdefs.h> 32#include <sys/cdefs.h>
33__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.122 2020/03/09 08:33:15 mlelstv Exp $"); 33__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.123 2020/03/11 13:48:45 mlelstv Exp $");
34 34
35#include <sys/types.h> 35#include <sys/types.h>
36#include <sys/param.h> 36#include <sys/param.h>
37#include <sys/systm.h> 37#include <sys/systm.h>
38#include <sys/proc.h> 38#include <sys/proc.h>
39#include <sys/errno.h> 39#include <sys/errno.h>
40#include <sys/buf.h> 40#include <sys/buf.h>
41#include <sys/bufq.h> 41#include <sys/bufq.h>
42#include <sys/kmem.h> 42#include <sys/kmem.h>
43#include <sys/malloc.h> 43#include <sys/malloc.h>
44#include <sys/module.h> 44#include <sys/module.h>
45#include <sys/pool.h> 45#include <sys/pool.h>
46#include <sys/ioctl.h> 46#include <sys/ioctl.h>
@@ -626,27 +626,27 @@ cgd_getdata(struct cgd_softc *sc, unsign @@ -626,27 +626,27 @@ cgd_getdata(struct cgd_softc *sc, unsign
626{ 626{
627 void *data = NULL; 627 void *data = NULL;
628 628
629 mutex_enter(&sc->sc_lock); 629 mutex_enter(&sc->sc_lock);
630 if (!sc->sc_data_used) { 630 if (!sc->sc_data_used) {
631 sc->sc_data_used = true; 631 sc->sc_data_used = true;
632 data = sc->sc_data; 632 data = sc->sc_data;
633 } 633 }
634 mutex_exit(&sc->sc_lock); 634 mutex_exit(&sc->sc_lock);
635 635
636 if (data) 636 if (data)
637 return data; 637 return data;
638 638
639 return malloc(size, M_DEVBUF, M_WAITOK); 639 return malloc(size, M_DEVBUF, M_NOWAIT);
640} 640}
641 641
642static void 642static void
643cgd_putdata(struct cgd_softc *sc, void *data) 643cgd_putdata(struct cgd_softc *sc, void *data)
644{ 644{
645 645
646 if (data == sc->sc_data) { 646 if (data == sc->sc_data) {
647 mutex_enter(&sc->sc_lock); 647 mutex_enter(&sc->sc_lock);
648 sc->sc_data_used = false; 648 sc->sc_data_used = false;
649 mutex_exit(&sc->sc_lock); 649 mutex_exit(&sc->sc_lock);
650 } else 650 } else
651 free(data, M_DEVBUF); 651 free(data, M_DEVBUF);
652} 652}