Short overview:Bcache does both writethrough and writeback caching. It presents itself as anew block device, a bit like say md. You can cache an arbitrary number ofblock devices with a single cache device, and attach and detach things atruntime - it's quite flexible.

It's very fast. It uses a b+ tree for the index, along with a journal tocoalesce index updates, and a bunch of other cool tricks like auxiliary binarysearch trees with software floating point keys for searching within btreenodes.

Bcache is solid, production ready code. There are still bugs being found thataffect specific configurations, but there haven't been any major issues foundin awhile - it's well past time I started working on getting it into mainline.

It's a lot of code - I tried to split it out so that it'd make some sort ofsense for reviewing. Let me know if there's anything else I can do to makereview easier.

TODO/known issues:

__up_write() needs to be exported for bcache to compile as a module - it'sused for bypassing lockdep when traversing the btree during garbagecollection. If someone else knows a better solution, please let me know.

The userspace interface is going to change before it goes in. The generalconsensus at LSF was that we don't want yet another interface forprobing/managing block devices, and dm exists so we may as well use that. Idon't think anyone's started on that yet, though.

Documentation needs to be updated. That's being actively worked on, though.