aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_init.c
diff options
context:
space:
mode:
authorJames Smart <James.Smart@Emulex.Com>2009-11-18 15:40:49 -0500
committerJames Bottomley <James.Bottomley@suse.de>2009-12-04 13:01:52 -0500
commit1c6f4ef5d6be7ef4cbe92a86286217971f52e2cd (patch)
tree6415ea806d637bae7e3894f509f08a3196147337 /drivers/scsi/lpfc/lpfc_init.c
parent891478a2442d8d0077651bc8316afaec8d85dd4d (diff)
[SCSI] lpfc 8.3.6 : Fix critical errors
Fix errors relating to crashes and hangs. - Fix crash due to list corruption while unloading driver. - Fix panic during pci-hot-plug testing. - Fix panic when unmapping luns. - Fixed total_scsi_bufs counting could cause exhausted memory. - Fixed locking issue causing hang. - Fixed the call from lpfc_new_scsi_buf_s3 to use lpfc_release_scsi_buf_s3. Signed-off-by: James Smart <james.smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_init.c')
-rw-r--r--drivers/scsi/lpfc/lpfc_init.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 93679f30a5af..5f5b2283d58c 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -2320,6 +2320,7 @@ lpfc_scsi_free(struct lpfc_hba *phba)
2320 2320
2321 spin_lock_irq(&phba->hbalock); 2321 spin_lock_irq(&phba->hbalock);
2322 /* Release all the lpfc_scsi_bufs maintained by this host. */ 2322 /* Release all the lpfc_scsi_bufs maintained by this host. */
2323 spin_lock(&phba->scsi_buf_list_lock);
2323 list_for_each_entry_safe(sb, sb_next, &phba->lpfc_scsi_buf_list, list) { 2324 list_for_each_entry_safe(sb, sb_next, &phba->lpfc_scsi_buf_list, list) {
2324 list_del(&sb->list); 2325 list_del(&sb->list);
2325 pci_pool_free(phba->lpfc_scsi_dma_buf_pool, sb->data, 2326 pci_pool_free(phba->lpfc_scsi_dma_buf_pool, sb->data,
@@ -2327,6 +2328,7 @@ lpfc_scsi_free(struct lpfc_hba *phba)
2327 kfree(sb); 2328 kfree(sb);
2328 phba->total_scsi_bufs--; 2329 phba->total_scsi_bufs--;
2329 } 2330 }
2331 spin_unlock(&phba->scsi_buf_list_lock);
2330 2332
2331 /* Release all the lpfc_iocbq entries maintained by this host. */ 2333 /* Release all the lpfc_iocbq entries maintained by this host. */
2332 list_for_each_entry_safe(io, io_next, &phba->lpfc_iocb_list, list) { 2334 list_for_each_entry_safe(io, io_next, &phba->lpfc_iocb_list, list) {
@@ -2334,9 +2336,7 @@ lpfc_scsi_free(struct lpfc_hba *phba)
2334 kfree(io); 2336 kfree(io);
2335 phba->total_iocbq_bufs--; 2337 phba->total_iocbq_bufs--;
2336 } 2338 }
2337
2338 spin_unlock_irq(&phba->hbalock); 2339 spin_unlock_irq(&phba->hbalock);
2339
2340 return 0; 2340 return 0;
2341} 2341}
2342 2342