On Wed, Apr 17, 2013 at 08:46:42AM -0400, Juan Mojica wrote: J> We manage to hit the following message with some regularity. J> J> arprequest: cannot find matching address J> J> The code shows a printf: J> J> printf("%s: cannot find matching address\n", __func__); J> J> J> Any reason this is a printf and not a J> J> log(LOG_ERR, J> J> The only things I can come up with are: J> J> a) it is a really severe and should be printed out, which if that is the J> case why isn't there an assert there? J> b) whoops, that should probably be a log(LOG_ERR, J> On our end we need to figure out exactly why we're intermittently hitting J> this patch of code.
Can you please try this patch? Let's see what's going on. printf()ing in kernel is especially unsafe when the event can be triggered remotely. The arprequest() is called on output path of a packet, however I'm not sure that it can't be triggered by incoming packet. -- Totus tuus, Glebius.
Index: if_ether.c =================================================================== --- if_ether.c (revision 249764) +++ if_ether.c (working copy) @@ -250,7 +250,9 @@ arprequest(struct ifnet *ifp, struct in_addr *sip, } IF_ADDR_RUNLOCK(ifp); if (sip == NULL) { - printf("%s: cannot find matching address\n", __func__); + log(LOG_ERR, "%s: cannot find matching address for " + "%s on %s\n", __func__, inet_ntoa(*tip), + if_name(ifp)); return; } }
_______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"