On Sat, Jun 15, 2024 at 06:09:20PM +0000, Chuck Lever III wrote: > > nfs4_find_get_deviceid() tries to be clever and do a lookup without > the spin lock first. > > If it can't find a matching deviceid, it creates a new device_info > (which calls bl_alloc_deviceid_node, and that registers the device's > PR key). > > Then it takes the nfs4_deviceid_lock and looks up the deviceid again. > If it finds it this time, bl_find_get_deviceid() frees the spare > (new) device_info, which unregisters the PR key for the same device. > > Any subsequent I/O from this client on that device gets EBADE. > > The umount later unregisters the device's PR key again. > > Seems like PR key registration should be done from a more > idempotent context...? Yes. Or at least not do this optimistic reservation.