Re: [PATCH 11/12] nvme-pci: split the initial probe from the rest path
From: Gerd Bayer <gbayer@linux.ibm.com>
Date: 2022-11-09 15:19:15
Also in:
asahi, linux-nvme
Hi Christoph, On Tue, 2022-11-08 at 16:02 +0100, Christoph Hellwig wrote:
nvme_reset_work is a little fragile as it needs to handle both resetting
a live controller and initializing one during probe. Split out the initial
probe and open code it in nvme_probe and leave nvme_reset_work to just do
the live controller reset.
This fixes a recently introduced bug where nvme_dev_disable causes a NULL
pointer dereferences in blk_mq_quiesce_tagset because the tagset pointer
is not set when the reset state is entered directly from the new state.
The separate probe code can skip the reset state and probe directly and
fixes this.
To make sure the system isn't single threaded on enabling nvme
controllers, set the PROBE_PREFER_ASYNCHRONOUS flag in the device_driver
structure so that the driver core probes in parallel.
Fixes: 98d81f0df70c ("nvme: use blk_mq_[un]quiesce_tagset")
Reported-by: Gerd Bayer <gbayer@linux.ibm.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/nvme/host/pci.c | 139 ++++++++++++++++++++++++----------------
1 file changed, 83 insertions(+), 56 deletions(-)I have successfully tested the patch series as proposed here on top of next-20220908. The small test script that I used to expose the race condition in my initial bug report https://lore.kernel.org/linux-nvme/20221108091609.1020-1-hdanton@sina.com/T/#t (local) did no longer reproduce the kernel panic. Even repeated unbind/bind/remove/rescan cycles worked without any issue. Out of curiousity I did run a little traffic to the NVMe drive after the repeated cycles, too. No issues. While the patch series did apply fine on next-20220909 I was unable to do any testing with that as that had different severe issues to boot. So feel free to add my Tested-by Gerd Bayer [off-list ref] for the whole series Thank you, Gerd Bayer _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel