Correct me if I'm wrong, but this really only affects storage devices, yes?
That narrows the scope of the problem quite some.
I suspect we could do a very good job of working out whether we're still
talking to the same fs if filesystem drivers were to help in that.
But I suspect we could do an even better job if we did that in userspace.
The logic to determine whether the new device is the same as the old device
can be arbitrarily complex, with increasing levels of success. Various
heuristics can be applied, some of which will involve knowledge of
filesystem layout, etc.
So would it not be possible to optionally punt the device naming decision
up to the hotplug scripts? So code up there can go do direct-IO reads of
the newly-present blockdev, use filesytem layout knowledge, peek at UUIDs,
superblocks, disk labels, partition tables, inode numbering, etc? Go look
up a database, work out what that filesystem was doing last time we saw it,
etc?
We could of course add things to the filesystems to help this process, but
it'd be good if all the state tracking and magic didn't have to be locked
up in the kernel.