mpt2sas: RESCAN Barrier work is added in case of HBA reset.
PATCH 1/3 mpt2sas: RESCAN Barrier work is added in case of HBA reset.
Add the cancel_pending_work flag from the fw_event_work structure, and then to set the flag during host reset, check the flag later from work threads context and if cancel_pending_work_flag is set ingore those events.
Now Rescan after host reset is changed.
Added special task MPT2SAS_RESCAN_AFTER_HOST_RESET. This task will be queued at the time of HBA reset. this task is treated as barrier. All work after MPT2SAS_RESCAN_AFTER_HOST_RESET will be treated as new work and will be server by callback handle. If host_recovery is going on while running RESCAN task, it will wait for shos_recovery_done completion which will be called from HBA reset DONE context.
---
drivers/scsi/mpt2sas/mpt2sas_base.c +3 -2
@@ -3607,6 +3607,8 @@ mpt2sas_base_attach(struct MPT2SAS_ADAPTER *ioc) ioc->ctl_cmds.status =MPT2_CMD_NOT_USED ;mutex_init (&ioc->ctl_cmds.mutex); +init_completion (&ioc->shost_recovery_done); +for (i =0 ; i <MPI2_EVENT_NOTIFY_EVENTMASK_WORDS ; i++) ioc->event_masks[i] =-1 ;
@@ -3811,9 +3813,8 @@ mpt2sas_base_hard_reset_handler(struct MPT2SAS_ADAPTER *ioc, int sleep_flag,spin_lock_irqsave (&ioc->ioc_reset_in_progress_lock, flags); ioc->shost_recovery =0 ; +complete (&ioc->shost_recovery_done);spin_unlock_irqrestore (&ioc->ioc_reset_in_progress_lock, flags); -if (!r) -_base_reset_handler (ioc,MPT2_IOC_RUNNING );return r; }
drivers/scsi/mpt2sas/mpt2sas_base.h +1 -2
@@ -119,7 +119,6 @@#define MPT2_IOC_PRE_RESET 1/* prior to host reset */ #define MPT2_IOC_AFTER_RESET 2/* just after host reset */ #define MPT2_IOC_DONE_RESET 3/* links re-initialized */ -#define MPT2_IOC_RUNNING 4/* shost running */ /* * logging format
@@ -603,7 +602,6 @@ struct MPT2SAS_ADAPTER {/* fw event handler */ char firmware_event_name[20 ];struct workqueue_struct *firmware_event_thread; -u8 fw_events_off;spinlock_t fw_event_lock;struct list_head fw_event_list;
@@ -611,6 +609,7 @@ struct MPT2SAS_ADAPTER {int aen_event_read_flag;u8 broadcast_aen_busy;u8 shost_recovery; +struct completion shost_recovery_done;spinlock_t ioc_reset_in_progress_lock;u8 ioc_link_reset_in_progress;u8 ignore_loginfos;
drivers/scsi/mpt2sas/mpt2sas_scsih.c +75 -65
264 lines not on this page · raw message