1*ac03832eSConrad Meyer /*- 2*ac03832eSConrad Meyer * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*ac03832eSConrad Meyer * 4*ac03832eSConrad Meyer * Copyright (c) 2019 Conrad Meyer <cem@FreeBSD.org> 5*ac03832eSConrad Meyer * 6*ac03832eSConrad Meyer * Redistribution and use in source and binary forms, with or without 7*ac03832eSConrad Meyer * modification, are permitted provided that the following conditions 8*ac03832eSConrad Meyer * are met: 9*ac03832eSConrad Meyer * 1. Redistributions of source code must retain the above copyright 10*ac03832eSConrad Meyer * notice, this list of conditions and the following disclaimer. 11*ac03832eSConrad Meyer * 2. Redistributions in binary form must reproduce the above copyright 12*ac03832eSConrad Meyer * notice, this list of conditions and the following disclaimer in the 13*ac03832eSConrad Meyer * documentation and/or other materials provided with the distribution. 14*ac03832eSConrad Meyer * 15*ac03832eSConrad Meyer * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16*ac03832eSConrad Meyer * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17*ac03832eSConrad Meyer * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18*ac03832eSConrad Meyer * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19*ac03832eSConrad Meyer * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20*ac03832eSConrad Meyer * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21*ac03832eSConrad Meyer * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22*ac03832eSConrad Meyer * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23*ac03832eSConrad Meyer * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24*ac03832eSConrad Meyer * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25*ac03832eSConrad Meyer * SUCH DAMAGE. 26*ac03832eSConrad Meyer * 27*ac03832eSConrad Meyer * $FreeBSD$ 28*ac03832eSConrad Meyer */ 29*ac03832eSConrad Meyer 30*ac03832eSConrad Meyer #pragma once 31*ac03832eSConrad Meyer 32*ac03832eSConrad Meyer #ifdef _KERNEL 33*ac03832eSConrad Meyer 34*ac03832eSConrad Meyer #define _GEOM_DEBUG(classname, ctrlvar, loglvl, biop, formatstr, ...) \ 35*ac03832eSConrad Meyer do { \ 36*ac03832eSConrad Meyer const int __control = (ctrlvar); \ 37*ac03832eSConrad Meyer const int __level = (loglvl); \ 38*ac03832eSConrad Meyer \ 39*ac03832eSConrad Meyer if (__control < __level) \ 40*ac03832eSConrad Meyer break; \ 41*ac03832eSConrad Meyer \ 42*ac03832eSConrad Meyer g_dbg_printf((classname), (__control > 0) ? __level : -1, \ 43*ac03832eSConrad Meyer (biop), ": " formatstr, ## __VA_ARGS__); \ 44*ac03832eSConrad Meyer } while (0) 45*ac03832eSConrad Meyer 46*ac03832eSConrad Meyer void g_dbg_printf(const char *classname, int lvl, struct bio *bp, 47*ac03832eSConrad Meyer const char *format, ...) __printflike(4, 5); 48*ac03832eSConrad Meyer 49*ac03832eSConrad Meyer #endif /* _KERNEL */ 50