> As a noob observing..Many of them seem to have names nothing like what their actual purpose is
Having worked a bit with low level kernel stuff (porting a unix OS to a new platform), I understand his observation. Even after working with the kernel for a while, many names don't really make sense.
Mandatory quote of Phil Karlton:
> There are only two hard things in Computer Science: cache invalidation and naming things.
BH means Buffer Head. The meaning and usage of Buffer Head has changed a lot across Linux versions. It's the basic unit of IO operations, but nowadays most users would use a bio for most of what you would have used a buffer head in the past. When you're working on filesystems you'll have to use BHs to talk to the hard drive though.
Linux FS infrastructure and Ext2 share a lot of names. For instance, ext2 and linux both have superblocks, inodes, blocks, etc. They are... logically the same, but at the same time they're very different - one lives purely on the disk, the other provides functions to the kernel. This makes conversation very complicated, when talking about the superblock, you have to mention which superblock you're talking about, because that's not always obvious from context.
> There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors.
Since simoooo's comment was vouched for by other users, I've moved your reply to be a child of that one.
> There are only two hard things in Computer Science: cache invalidation, off-by-one errors and naming things.