Of course people will keep blabbering about how goto is good while it has been flagged as very bad for decades. Mostly people not actually understanding what is bad about it and why we still use it in C, mostly for error handling, for lack of better constructs. Any other use of it in C *is* generally a very bad idea.
(Quick note: sorry to say that your "egrep -vc 'goto err|goto out|goto fail'" is not really evidence that goto is ever used for anything else than error handling in the Linux kernel code.)
Note that behind this common use case, error handling, the idea is to factor sections of code instead of making them redundant, which is arguably much worse.
There is a well known construct that happens to factor code just fine, and it's called a function. Yes, in many cases you can implement error handling more cleanly writing error handling functions rather than jumping up and down inside a function. With any modern compiler (I mean, younger than 25 years or so), it will even have a very minimal performance impact, if any. Except possibly in very tight loops, for which hand-optimizing further is warranted. You may argue that this approach is not really workable if the error handling part of a given function can have other paths than directly return from said function once the clean-up has been done. In which case, the idea of using goto with not just one code path (error handling/clean-up/return from function) but several is preciselyt what quickly becomes atrocious. The famous spaghetting syndrome.
Now of course, if you resort to a function, that means you'll have to pass some context around, which is not fun. We are lazy.
So with that said, do I still use goto in C on a regular basis for error handling? Yeah. Sure. But I know why I do. I don't do it just because it looks cool to be the programming kiddo that knows better, or to make YT videos with tens/hundreds of thousands of views. And, pointing out that there are other ways to skin the cat, often almost as efficient and much cleaner.
Also, I agree about the fact Linux is not a particularly good example of code style and code quality. But most of it at least looks like C written by people who have a good command of it, so that's already something.
It is, however and IMO, an example of particularly good project management, which is the number 1 reason, again IMO, for its success and longevity.
All in all, that's some kind of false debate that just keeps on going, as again it's used for lack of better constructs in C and similar languages. Not that I take it as an example, but since it's been pretty hyped in the past few years, has anyone heard of using "goto" in Rust? Why keep venting about it?