SCSI fixes on 20130811
This is three bug fixes: An fnic warning caused by sleeping under a lock, a major regression with our updated WRITE SAME/UNMAP logic which caused tons of USB devices (and one RAID card) to cease to function and a megaraid_sas firmware initialisation problem which causes kdump failures. Signed-off-by: James Bottomley <JBottomley@Parallels.com> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iQEcBAABAgAGBQJSB/4vAAoJEDeqqVYsXL0MUzcH/iSBLSozc1ofWxaDuOvnKHwU 3bi4hjwMXMw34BSno99F078uJK4Rt/gbySY60CxwuujmVRjwebSxSCrkmyrPQ9rs 8m2U2dtBGmyecSChWWbr8YAnA6AP3cFLxv97pkrIxbakdG7luGUVsAK+SgyehsRg CxPIwG1vk4sl5yQ72eKTRwiFkCuIUoqTrlXjf8Qgfm02SJbYc2RWfZODW+bUB81x tE4NsRlcJ9QnhhOBzzayczJx2qh/1eCpEyENt9XGamzcoy94yRdmfusdNoA6alIx CLFAkCgmnVamEuF5EMLh4mYv9yYYblvdR4IUKxX8bY12eNPYTHUyt0iAXpzqjcU= =CGF3 -----END PGP SIGNATURE----- Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi Pull SCSI fixes from James Bottomley: "This is three bug fixes: An fnic warning caused by sleeping under a lock, a major regression with our updated WRITE SAME/UNMAP logic which caused tons of USB devices (and one RAID card) to cease to function and a megaraid_sas firmware initialisation problem which causes kdump failures" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: [SCSI] Don't attempt to send extended INQUIRY command if skip_vpd_pages is set [SCSI] fnic: BUG: sleeping function called from invalid context during probe [SCSI] megaraid_sas: megaraid_sas driver init fails in kdump kernel
This commit is contained in:
commit
e5d081f468
4 changed files with 28 additions and 19 deletions
|
@ -38,7 +38,7 @@
|
|||
|
||||
#define DRV_NAME "fnic"
|
||||
#define DRV_DESCRIPTION "Cisco FCoE HBA Driver"
|
||||
#define DRV_VERSION "1.5.0.22"
|
||||
#define DRV_VERSION "1.5.0.23"
|
||||
#define PFX DRV_NAME ": "
|
||||
#define DFX DRV_NAME "%d: "
|
||||
|
||||
|
|
|
@ -642,19 +642,6 @@ static int fnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
INIT_WORK(&fnic->fip_frame_work, fnic_handle_fip_frame);
|
||||
INIT_WORK(&fnic->event_work, fnic_handle_event);
|
||||
skb_queue_head_init(&fnic->fip_frame_queue);
|
||||
spin_lock_irqsave(&fnic_list_lock, flags);
|
||||
if (!fnic_fip_queue) {
|
||||
fnic_fip_queue =
|
||||
create_singlethread_workqueue("fnic_fip_q");
|
||||
if (!fnic_fip_queue) {
|
||||
spin_unlock_irqrestore(&fnic_list_lock, flags);
|
||||
printk(KERN_ERR PFX "fnic FIP work queue "
|
||||
"create failed\n");
|
||||
err = -ENOMEM;
|
||||
goto err_out_free_max_pool;
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&fnic_list_lock, flags);
|
||||
INIT_LIST_HEAD(&fnic->evlist);
|
||||
INIT_LIST_HEAD(&fnic->vlans);
|
||||
} else {
|
||||
|
@ -960,6 +947,13 @@ static int __init fnic_init_module(void)
|
|||
spin_lock_init(&fnic_list_lock);
|
||||
INIT_LIST_HEAD(&fnic_list);
|
||||
|
||||
fnic_fip_queue = create_singlethread_workqueue("fnic_fip_q");
|
||||
if (!fnic_fip_queue) {
|
||||
printk(KERN_ERR PFX "fnic FIP work queue create failed\n");
|
||||
err = -ENOMEM;
|
||||
goto err_create_fip_workq;
|
||||
}
|
||||
|
||||
fnic_fc_transport = fc_attach_transport(&fnic_fc_functions);
|
||||
if (!fnic_fc_transport) {
|
||||
printk(KERN_ERR PFX "fc_attach_transport error\n");
|
||||
|
@ -978,6 +972,8 @@ static int __init fnic_init_module(void)
|
|||
err_pci_register:
|
||||
fc_release_transport(fnic_fc_transport);
|
||||
err_fc_transport:
|
||||
destroy_workqueue(fnic_fip_queue);
|
||||
err_create_fip_workq:
|
||||
destroy_workqueue(fnic_event_queue);
|
||||
err_create_fnic_workq:
|
||||
kmem_cache_destroy(fnic_io_req_cache);
|
||||
|
|
|
@ -3547,11 +3547,21 @@ static int megasas_init_fw(struct megasas_instance *instance)
|
|||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* We expect the FW state to be READY
|
||||
*/
|
||||
if (megasas_transition_to_ready(instance, 0))
|
||||
goto fail_ready_state;
|
||||
if (megasas_transition_to_ready(instance, 0)) {
|
||||
atomic_set(&instance->fw_reset_no_pci_access, 1);
|
||||
instance->instancet->adp_reset
|
||||
(instance, instance->reg_set);
|
||||
atomic_set(&instance->fw_reset_no_pci_access, 0);
|
||||
dev_info(&instance->pdev->dev,
|
||||
"megasas: FW restarted successfully from %s!\n",
|
||||
__func__);
|
||||
|
||||
/*waitting for about 30 second before retry*/
|
||||
ssleep(30);
|
||||
|
||||
if (megasas_transition_to_ready(instance, 0))
|
||||
goto fail_ready_state;
|
||||
}
|
||||
|
||||
/*
|
||||
* MSI-X host index 0 is common for all adapter.
|
||||
|
|
|
@ -1031,6 +1031,9 @@ int scsi_get_vpd_page(struct scsi_device *sdev, u8 page, unsigned char *buf,
|
|||
{
|
||||
int i, result;
|
||||
|
||||
if (sdev->skip_vpd_pages)
|
||||
goto fail;
|
||||
|
||||
/* Ask for all the pages supported by this device */
|
||||
result = scsi_vpd_inquiry(sdev, buf, 0, buf_len);
|
||||
if (result)
|
||||
|
|
Loading…
Reference in a new issue