The code to create, update or delete a tagset and namespaces in nvme_reset_work is a bit convoluted. Refactor it with a two high-level conditionals for first probe vs reset and I/O queues vs no I/O queues to make the code flow more clear.
This is clearer, but what I think would be even cleaner, is if we simply move the whole first time to a different probe_work and treat it like it is instead of relying on resources existence as a state indicators (tagset/admin_q). The shared portion can move to helpers.