Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

nvme-pci: Fix an error handling path in 'nvme_probe()'

Release resources in the correct order in order not to miss a
'put_device()' if 'nvme_dev_map()' fails.

Fixes: b00a726a9fd8 ("NVMe: Don't unmap controller registers on reset")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Christophe JAILLET and committed by
Jens Axboe
b00c9b7a 86eea289

+4 -3
+4 -3
drivers/nvme/host/pci.c
··· 2299 2299 2300 2300 result = nvme_dev_map(dev); 2301 2301 if (result) 2302 - goto free; 2302 + goto put_pci; 2303 2303 2304 2304 INIT_WORK(&dev->ctrl.reset_work, nvme_reset_work); 2305 2305 INIT_WORK(&dev->remove_work, nvme_remove_dead_ctrl_work); ··· 2308 2308 2309 2309 result = nvme_setup_prp_pools(dev); 2310 2310 if (result) 2311 - goto put_pci; 2311 + goto unmap; 2312 2312 2313 2313 quirks |= check_dell_samsung_bug(pdev); 2314 2314 ··· 2325 2325 2326 2326 release_pools: 2327 2327 nvme_release_prp_pools(dev); 2328 + unmap: 2329 + nvme_dev_unmap(dev); 2328 2330 put_pci: 2329 2331 put_device(dev->dev); 2330 - nvme_dev_unmap(dev); 2331 2332 free: 2332 2333 kfree(dev->queues); 2333 2334 kfree(dev);