Does this imply that if the dm_swap_table() call fails, then the "inactive" mapping is automatically deleted? Although....looking at the dm_swap_table() code, it looks like it can't actually fail (the only reason it could fail is if the device wasn't suspended, which is verified before calling dm_swap_table - and the _hash_lock prevent another process from trying to unsuspend the device in-between the calls).

As a side note, the __bind() function in dm.c currently will never return an error, so dm_swap_table() doesn't necessarily need to check for one.

On first pass through this file, everything looks pretty good. As long as the actual definition of the interface isn't going to change, I'd say go ahead and include this. After it's merged, we'll put together a version of EVMS that will support the new interface.