hpsa: cleanup for init_one step 2 in kdump
authorRobert Elliott <elliott@hp.com>
Thu, 23 Apr 2015 14:34:43 +0000 (09:34 -0500)
committerJames Bottomley <JBottomley@Odin.com>
Sun, 31 May 2015 18:40:39 +0000 (11:40 -0700)
In hpsa_undo_allocations_after_kdump_soft_reset,
the things allocated in hpsa_init_one step 2 -
h->resubmit_wq and h->lockup_detected  need to
be freed, in the right order.

Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
Reviewed-by: Hannes Reinecke <hare@Suse.de>
Signed-off-by: Robert Elliott <elliott@hp.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: James Bottomley <JBottomley@Odin.com>
drivers/scsi/hpsa.c

index e029df7b5b98254b33474572c9af8738a4a9f3cb..1979b7e45c93904e354c19e51d4498399b4341f4 100644 (file)
@@ -7376,6 +7376,16 @@ static void hpsa_undo_allocations_after_kdump_soft_reset(struct ctlr_info *h)
        hpsa_free_cmd_pool(h);                  /* init_one 5 */
        hpsa_free_irqs(h);                      /* init_one 4 */
        hpsa_free_pci_init(h);                  /* init_one 3 */
+       free_percpu(h->lockup_detected);        /* init_one 2 */
+       h->lockup_detected = NULL;              /* init_one 2 */
+       if (h->resubmit_wq) {
+               destroy_workqueue(h->resubmit_wq);      /* init_one 1 */
+               h->resubmit_wq = NULL;
+       }
+       if (h->rescan_ctlr_wq) {
+               destroy_workqueue(h->rescan_ctlr_wq);
+               h->rescan_ctlr_wq = NULL;
+       }
        kfree(h);                               /* init_one 1 */
 }