This adds a lot of mess to work around the blk-crypto fallback code, and looking at it a bit more I think the fundamental problem is that we call into the blk-crypto fallback code from the block layer, which is very much against how the rest of the block layer works for submit_bio based driver. So instead of piling up workarounds in the block layer code I'd suggest you change the blk-crypto code to work more like the rest of the block layer for bio based drivers, i.e. move the call into the drivers that you care about and stop supporting it for others. The whole concept of working around the lack of features in drivers in the block layer is just going to cause more and more problems.