RE: [PATCH v2 1/2] Replace if statement with WARN_ON_ONCE() incmci_rediscover().
From: Luck, Tony
Date: Tue Oct 23 2012 - 12:17:02 EST
> First of all, I do think I was answering your question. As I said
> before, if an online cpu == dying here, there must be something wrong.
> Am I right here ?
Yes - but there is a fuzzy line over where it is good to check for "something wrong"
or whether to trust that the caller of the function knew what they were doing.
For example we trust that "dying" is a valid cpu number. If we were
super-paranoid that someone might change the code and call us with a
bad argument, we might add:
BUG_ON(dying < 0 || dying >= MAX_NR_CPUS);
This would certainly help debug the case if someone did make a bogus
change ... but I think it is clear that this test is way past the fuzzy line and
Back to the case in question: do we think there is a credible case where
the "dying" cpu can show up in our "for_each_cpu_online()" loop? The
original author of the code was worried enough to make a test, but thought
that the appropriate action was to silently skip it. You want to add a WARN_ON,
which will cause users who read the console logs to worry, but that most users
will never see.