[PATCH 11/12] nvme-pci: split the initial probe from the rest path
Gerd Bayer
gbayer at linux.ibm.com
Wed Nov 9 07:18:32 PST 2022
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 at linux.ibm.com>
> Signed-off-by: Christoph Hellwig <hch at 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
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 <gbayer at linxu.ibm.com> for the whole series
Thank you,
Gerd Bayer
More information about the linux-arm-kernel
mailing list