aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorEric Moore <eric.moore@lsi.com>2009-04-21 17:43:33 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2009-04-27 11:54:15 -0400
commit6f92a7a0aff413cdf42955a187647e3736ebd8f3 (patch)
tree3351d438d233a7afa820a769d24bc7d64735834d /drivers/scsi
parent99bb214b1b652c475bb3d79cede47ecb76b758fa (diff)
[SCSI] mpt2sas: fix hotplug event processing
Here's a fix for hotplug events. The useage of queue_delayed_work seems to broke the fifo for processing of firmware events. After several iterations of adding and removing cabling connected to jbods, the devices are not getting added becuase kernel thread is activited out of order. Signed-off-by: Eric Moore <eric.moore@lsi.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_scsih.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
index 4dffbec7935..e3a7967259e 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
@@ -119,7 +119,7 @@ struct sense_info {
119 */ 119 */
120struct fw_event_work { 120struct fw_event_work {
121 struct list_head list; 121 struct list_head list;
122 struct delayed_work work; 122 struct work_struct work;
123 struct MPT2SAS_ADAPTER *ioc; 123 struct MPT2SAS_ADAPTER *ioc;
124 u8 VF_ID; 124 u8 VF_ID;
125 u8 host_reset_handling; 125 u8 host_reset_handling;
@@ -2007,8 +2007,8 @@ _scsih_fw_event_add(struct MPT2SAS_ADAPTER *ioc, struct fw_event_work *fw_event)
2007 2007
2008 spin_lock_irqsave(&ioc->fw_event_lock, flags); 2008 spin_lock_irqsave(&ioc->fw_event_lock, flags);
2009 list_add_tail(&fw_event->list, &ioc->fw_event_list); 2009 list_add_tail(&fw_event->list, &ioc->fw_event_list);
2010 INIT_DELAYED_WORK(&fw_event->work, _firmware_event_work); 2010 INIT_WORK(&fw_event->work, _firmware_event_work);
2011 queue_delayed_work(ioc->firmware_event_thread, &fw_event->work, 1); 2011 queue_work(ioc->firmware_event_thread, &fw_event->work);
2012 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); 2012 spin_unlock_irqrestore(&ioc->fw_event_lock, flags);
2013} 2013}
2014 2014
@@ -2052,7 +2052,7 @@ _scsih_fw_event_requeue(struct MPT2SAS_ADAPTER *ioc, struct fw_event_work
2052 return; 2052 return;
2053 2053
2054 spin_lock_irqsave(&ioc->fw_event_lock, flags); 2054 spin_lock_irqsave(&ioc->fw_event_lock, flags);
2055 queue_delayed_work(ioc->firmware_event_thread, &fw_event->work, delay); 2055 queue_work(ioc->firmware_event_thread, &fw_event->work);
2056 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); 2056 spin_unlock_irqrestore(&ioc->fw_event_lock, flags);
2057} 2057}
2058 2058
@@ -4961,7 +4961,7 @@ static void
4961_firmware_event_work(struct work_struct *work) 4961_firmware_event_work(struct work_struct *work)
4962{ 4962{
4963 struct fw_event_work *fw_event = container_of(work, 4963 struct fw_event_work *fw_event = container_of(work,
4964 struct fw_event_work, work.work); 4964 struct fw_event_work, work);
4965 unsigned long flags; 4965 unsigned long flags;
4966 struct MPT2SAS_ADAPTER *ioc = fw_event->ioc; 4966 struct MPT2SAS_ADAPTER *ioc = fw_event->ioc;
4967 4967