[PATCHv3] nvme: use srcu for iterating namespace list
Shinichiro Kawasaki
shinichiro.kawasaki at wdc.com
Mon May 27 06:15:54 PDT 2024
On May 24, 2024 / 08:53, Keith Busch wrote:
> From: Keith Busch <kbusch at kernel.org>
>
> The nvme pci driver synchronizes with all the namespace queues during a
> reset to ensure that there's no pending timeout work.
>
> Meanwhile the timeout work potentially iterates those same namespaces to
> freeze their queues.
>
> Each of those namespace iterations use the same read lock. If a write
> lock should somehow get between the synchronize and freeze steps, then
> forward progress is deadlocked.
>
> We had been relying on the nvme controller state machine to ensure the
> reset work wouldn't conflict with timeout work. That guarantee may be a
> bit fragile to rely on, so iterate the namespace lists without taking
> potentially circular locks, as reported by lockdep.
>
> Link: https://lore.kernel.org/all/20220930001943.zdbvolc3gkekfmcv@shindev/
> Reported-by: Shinichiro Kawasaki <shinichiro.kawasaki at wdc.com>
> Tested-by: Shinichiro Kawasaki <shinichiro.kawasaki at wdc.com>
FYI, I ran my test set again for this v3 patch, and observed no failure. Good.
More information about the Linux-nvme
mailing list