Thanks for an interesting article. I'd like to add one point for people writing userland code: using ioctl() to talk to the device mapper is a Really Bad Idea. Use libdevmapper instead.
The device mapper's ioctl() interface is arcane and ugly, but libdevmapper hides all that, protecting your sanity, saving you effort and giving you source-level compatibility if the userland/DM interface ever changes.