Re: [PATCH v2] checkpatch: Add a warning for log messages that don't end in a new line
From: Logan Gunthorpe
Date: Mon Nov 27 2017 - 14:58:16 EST
On 27/11/17 11:57 AM, Joe Perches wrote:
It may or not be correct.
It's absolutely not correct in that it either requires that a subsequent
KERN_CONT/pr_cont or a '\n' at the end and it has neither.
Without inter-function call code flow analysis,
it's not possible to be correct.
But how many cases actually have the pr_cont/KERN_cont called in
different functions? This appears to be exceedingly rare to me.
If you can get the false positive & false negative
rate higher, I'll listen.
The only two classes of false positives that you've pointed out or that
I'm aware of:
1) The case where call did not either end in a '\n' or have a
KERN_CONT/pr_cont in a subsequent call. I've been arguing (to deaf ears)
that a warning is appropriate here and this is not a false positive
because it absolutely is incorrect one way or the other. Coccinnelle
will also suffer from this issue because it can no better decide whether
the developer intended for the next call to be a continuation or for a
'\n' to end the line.
2) Cases where the pr_cont/KERN_CONT is not in sufficient context for
the script to detect. These are impossible to fix (and it's likely also
impossible for Coccinelle to be 100% accurate here). However, I'd expect
these to be *very* rare and I'm only actually aware of one case where
this has actually happened (lib/locking-selftest.c:1189) and (mostly by
luck) my v2 patch does not flag this where Coccinelle did. Not to
mention that continuation usage is discouraged in new code so this
should be even rarer on the majority of what checkpatch is used for.
(also 3. would be the %pV case, but I've removed those in what could be
a v3 of the patch -- I'd also be happy to address other false positives
classes if I could find them)
False negatives are much harder to quantify or improve. But given that I
detect nearly 6000 errors in the existing kernel it can't be *that*
high. Also, these false negatives do nothing to negate the benefit of
having this functionality seeing the vast majority of developers are
doing simple things with pr_* and dev_*.
Coccinelle may very well be able to do better at false negatives. But in
this case, it would still be great to have both because checkpatch will
flag a significant subset of the errors much earlier in the development
cycle and save developers a bunch of time.
So, in my opinion, I think focusing too hard on the false negatives
deprives developers of what could be a useful check.
I think the Coccinelle script has a better chance
to be more correct.
And yet, you have not pointed out any false positives that my patch
gives which Coccinelle does/would not. It really feels to me like your
biases are guiding your decision here and you aren't really looking at
the results.
Another thought I've had is that the dev_ functions don't have any form
of continuation. So we could potentially limit checkpatch to looking for
those to avoid the issues with continuations. It's not high coverage but
at least a lot of the driver patches would be checked with no chance of
false positives. I think there would be value in doing that.
Logan