Module Name: src Committed By: ozaki-r Date: Fri Mar 23 04:09:41 UTC 2018
Modified Files: src/sys/net: route.c Log Message: Don't take RT_LOCK in DDB It definitely causes a diagnostic failure if LOCKDEBUG is enabled. To generate a diff of this commit: cvs rdiff -u -r1.206 -r1.207 src/sys/net/route.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/net/route.c diff -u src/sys/net/route.c:1.206 src/sys/net/route.c:1.207 --- src/sys/net/route.c:1.206 Tue Jan 30 11:01:04 2018 +++ src/sys/net/route.c Fri Mar 23 04:09:41 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: route.c,v 1.206 2018/01/30 11:01:04 ozaki-r Exp $ */ +/* $NetBSD: route.c,v 1.207 2018/03/23 04:09:41 ozaki-r Exp $ */ /*- * Copyright (c) 1998, 2008 The NetBSD Foundation, Inc. @@ -97,7 +97,7 @@ #endif #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.206 2018/01/30 11:01:04 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.207 2018/03/23 04:09:41 ozaki-r Exp $"); #include <sys/param.h> #ifdef RTFLUSH_DEBUG @@ -2147,13 +2147,21 @@ rt_delete_matched_entries(sa_family_t fa } } +static int +rt_walktree_locked(sa_family_t family, int (*f)(struct rtentry *, void *), + void *v) +{ + + return rtbl_walktree(family, f, v); +} + int rt_walktree(sa_family_t family, int (*f)(struct rtentry *, void *), void *v) { int error; RT_RLOCK(); - error = rtbl_walktree(family, f, v); + error = rt_walktree_locked(family, f, v); RT_UNLOCK(); return error; @@ -2246,6 +2254,8 @@ void db_show_routes(db_expr_t addr, bool have_addr, db_expr_t count, const char *modif) { - rt_walktree(AF_INET, db_show_rtentry, NULL); + + /* Taking RT_LOCK will fail if LOCKDEBUG is enabled. */ + rt_walktree_locked(AF_INET, db_show_rtentry, NULL); } #endif