I found that a good way to do this is to try and guide the person's thoughts carefully towards the point that you are trying to make. The monent of realization that this hopefully creates is a strong teaching moment. And they tend to experience this as emotional high points themselves when they manage to take up your train of thought and complete it.
I may have misunderstood or be misremembering, but isn't that what's called “the Socratic method”? Which seems to imply that this ought to be known pretty generally, even among Linux kernel developers. It's not as if it were some new-fangled weird idea out of left field...
If your aim is to make yourself feel better by putting someone down, then sure, I guess the person is responsible for the code, go nuts.
The aim of any adult should be to get a contribution without the flaws. If that's your aim, then telling someone they are stupid or whatever, at best, does nothing. At worst, they never contribute again.
How can you produce good work if you never improve yourself? If going personal can improve someone and then improve their work, whats the argument again that we shouldn't go personal?
"Going personal", as the grandparent pointed out, doesn't help anyone improve themselves. You can point out issues with someone's contribution without attacking them, and that's all they need to improve.
If someone is incapable or refuses to learn from that, then you can say that they need to before you can accept contributions from them, but attacking them personally is just unacceptable.
Telling someone they are lazy or they didn't think isn't critique of their work, it's a statement about them as a person.
If the work is wrong or bad, explain why. Insulting someone doesn't help them improve.
If you argument is people won't change unless they are made to feel bad, people said the same thing about physical pain - banning corporal punishment would mean no child would learn again. That was nonsense, and so is the idea that making people feel bad is necessary for them to improve.