I'm still very doubtful on this whole approach, and I think you are ignoring the root cause, which is dm-multipath keeping a q_usage_count reference for an unbounded time. It is only supposed to be held over I/O, and I/O is expected to time out. You'll probably get much farther by changing dm-multipath to not hold a q_usage_count reference for something not actually under I/O.