Actually I suggest the whole Linux FAQ because of many good explanations to questions like why isn't the linux kernel a microkernel and why aren't the gotos replaced with C style exceptions.
They give a pretty good answer to latter question - Admittedly, all those goto's do look a bit ugly. However, they are usually limited to error paths, and are used to reduce the amount of code required to perform cleanup operations. Replacing these with Politically Correct if-then-else blocks would require duplication of cleanup code. So switching to if-then-else blocks might be good Computer Science theory, but using goto's is good Engineering. Since the Linux kernel is one designed to be used, rather than to demonstrate theory, sound engineering principles take priority.
It is definitely a nice reading on a rainy afternoon
Sadly, I get the feeling that the FAQ - or, at least, this version of it - has been badly neglected. Many of the answers were written quite a while ago, rendering the answers misleading or just plain wrong. Many of the answers refer to 2.4 as the current "stable" kernel, dating them to 2004 or earlier.
They give a pretty good answer to latter question - Admittedly, all those goto's do look a bit ugly. However, they are usually limited to error paths, and are used to reduce the amount of code required to perform cleanup operations. Replacing these with Politically Correct if-then-else blocks would require duplication of cleanup code. So switching to if-then-else blocks might be good Computer Science theory, but using goto's is good Engineering. Since the Linux kernel is one designed to be used, rather than to demonstrate theory, sound engineering principles take priority.
It is definitely a nice reading on a rainy afternoon