Merge branch 'nvme-5.3' of git://git.infradead.org/nvme into for-linus
Pull NVMe fixes from Christoph. * 'nvme-5.3' of git://git.infradead.org/nvme: Revert "nvme-pci: don't create a read hctx mapping without read queues" nvme: fix multipath crash when ANA is deactivated nvme: fix memory leak caused by incorrect subsystem free nvme: ignore subnqn for ADATA SX6000LNP
This commit is contained in:
commit
9c0b2596f2
|
@ -2311,15 +2311,13 @@ static void nvme_init_subnqn(struct nvme_subsystem *subsys, struct nvme_ctrl *ct
|
|||
memset(subsys->subnqn + off, 0, sizeof(subsys->subnqn) - off);
|
||||
}
|
||||
|
||||
static void __nvme_release_subsystem(struct nvme_subsystem *subsys)
|
||||
{
|
||||
ida_simple_remove(&nvme_subsystems_ida, subsys->instance);
|
||||
kfree(subsys);
|
||||
}
|
||||
|
||||
static void nvme_release_subsystem(struct device *dev)
|
||||
{
|
||||
__nvme_release_subsystem(container_of(dev, struct nvme_subsystem, dev));
|
||||
struct nvme_subsystem *subsys =
|
||||
container_of(dev, struct nvme_subsystem, dev);
|
||||
|
||||
ida_simple_remove(&nvme_subsystems_ida, subsys->instance);
|
||||
kfree(subsys);
|
||||
}
|
||||
|
||||
static void nvme_destroy_subsystem(struct kref *ref)
|
||||
|
@ -2477,7 +2475,7 @@ static int nvme_init_subsystem(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
|
|||
mutex_lock(&nvme_subsystems_lock);
|
||||
found = __nvme_find_get_subsystem(subsys->subnqn);
|
||||
if (found) {
|
||||
__nvme_release_subsystem(subsys);
|
||||
put_device(&subsys->dev);
|
||||
subsys = found;
|
||||
|
||||
if (!nvme_validate_cntlid(subsys, ctrl, id)) {
|
||||
|
|
|
@ -12,11 +12,6 @@ module_param(multipath, bool, 0444);
|
|||
MODULE_PARM_DESC(multipath,
|
||||
"turn on native support for multiple controllers per subsystem");
|
||||
|
||||
inline bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl)
|
||||
{
|
||||
return multipath && ctrl->subsys && (ctrl->subsys->cmic & (1 << 3));
|
||||
}
|
||||
|
||||
/*
|
||||
* If multipathing is enabled we need to always use the subsystem instance
|
||||
* number for numbering our devices to avoid conflicts between subsystems that
|
||||
|
@ -622,7 +617,8 @@ int nvme_mpath_init(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
|
|||
{
|
||||
int error;
|
||||
|
||||
if (!nvme_ctrl_use_ana(ctrl))
|
||||
/* check if multipath is enabled and we have the capability */
|
||||
if (!multipath || !ctrl->subsys || !(ctrl->subsys->cmic & (1 << 3)))
|
||||
return 0;
|
||||
|
||||
ctrl->anacap = id->anacap;
|
||||
|
|
|
@ -485,7 +485,11 @@ extern const struct attribute_group *nvme_ns_id_attr_groups[];
|
|||
extern const struct block_device_operations nvme_ns_head_ops;
|
||||
|
||||
#ifdef CONFIG_NVME_MULTIPATH
|
||||
bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl);
|
||||
static inline bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl)
|
||||
{
|
||||
return ctrl->ana_log_buf != NULL;
|
||||
}
|
||||
|
||||
void nvme_set_disk_name(char *disk_name, struct nvme_ns *ns,
|
||||
struct nvme_ctrl *ctrl, int *flags);
|
||||
void nvme_failover_req(struct request *req);
|
||||
|
|
|
@ -2254,9 +2254,7 @@ static int nvme_dev_add(struct nvme_dev *dev)
|
|||
if (!dev->ctrl.tagset) {
|
||||
dev->tagset.ops = &nvme_mq_ops;
|
||||
dev->tagset.nr_hw_queues = dev->online_queues - 1;
|
||||
dev->tagset.nr_maps = 1; /* default */
|
||||
if (dev->io_queues[HCTX_TYPE_READ])
|
||||
dev->tagset.nr_maps++;
|
||||
dev->tagset.nr_maps = 2; /* default + read */
|
||||
if (dev->io_queues[HCTX_TYPE_POLL])
|
||||
dev->tagset.nr_maps++;
|
||||
dev->tagset.timeout = NVME_IO_TIMEOUT;
|
||||
|
@ -3029,6 +3027,8 @@ static const struct pci_device_id nvme_id_table[] = {
|
|||
.driver_data = NVME_QUIRK_LIGHTNVM, },
|
||||
{ PCI_DEVICE(0x1d1d, 0x2601), /* CNEX Granby */
|
||||
.driver_data = NVME_QUIRK_LIGHTNVM, },
|
||||
{ PCI_DEVICE(0x10ec, 0x5762), /* ADATA SX6000LNP */
|
||||
.driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, },
|
||||
{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2001) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2003) },
|
||||
|
|
Loading…
Reference in New Issue