Merge ../scsi-rc-fixes-2.6
[powerpc.git] / drivers / scsi / aic94xx / aic94xx_init.c
index 57c5ba4..42302ef 100644 (file)
@@ -724,6 +724,15 @@ static void asd_free_queues(struct asd_ha_struct *asd_ha)
 
        list_for_each_safe(pos, n, &pending) {
                struct asd_ascb *ascb = list_entry(pos, struct asd_ascb, list);
+               /*
+                * Delete unexpired ascb timers.  This may happen if we issue
+                * a CONTROL PHY scb to an adapter and rmmod before the scb
+                * times out.  Apparently we don't wait for the CONTROL PHY
+                * to complete, so it doesn't matter if we kill the timer.
+                */
+               del_timer_sync(&ascb->timer);
+               WARN_ON(ascb->scb->header.opcode != CONTROL_PHY);
+
                list_del_init(pos);
                ASD_DPRINTK("freeing from pending\n");
                asd_ascb_free(ascb);