I think the right fix is to simply give each recover_object_work() call it's own work_struct in a structure also containing the oid. While this means a memory allocation per object to be recovered it also means complete independence between recovery operations, including kicking off onces that have I/O pending ASAP and allowing multiple recoveries in parallel. I'm about to leave for a long haul flight and will try to implement this solution while I'm on the plane. |