diff options
Diffstat (limited to 'drivers/scsi/pm8001/pm8001_sas.c')
| -rw-r--r-- | drivers/scsi/pm8001/pm8001_sas.c | 37 | 
1 files changed, 19 insertions, 18 deletions
diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c index 3b11edd4a50c..b961112395d5 100644 --- a/drivers/scsi/pm8001/pm8001_sas.c +++ b/drivers/scsi/pm8001/pm8001_sas.c @@ -650,9 +650,9 @@ int pm8001_dev_found(struct domain_device *dev)  static void pm8001_task_done(struct sas_task *task)  { -	if (!del_timer(&task->timer)) +	if (!del_timer(&task->slow_task->timer))  		return; -	complete(&task->completion); +	complete(&task->slow_task->completion);  }  static void pm8001_tmf_timedout(unsigned long data) @@ -660,7 +660,7 @@ static void pm8001_tmf_timedout(unsigned long data)  	struct sas_task *task = (struct sas_task *)data;  	task->task_state_flags |= SAS_TASK_STATE_ABORTED; -	complete(&task->completion); +	complete(&task->slow_task->completion);  }  #define PM8001_TASK_TIMEOUT 20 @@ -683,7 +683,7 @@ static int pm8001_exec_internal_tmf_task(struct domain_device *dev,  	struct pm8001_hba_info *pm8001_ha = pm8001_find_ha_by_dev(dev);  	for (retry = 0; retry < 3; retry++) { -		task = sas_alloc_task(GFP_KERNEL); +		task = sas_alloc_slow_task(GFP_KERNEL);  		if (!task)  			return -ENOMEM; @@ -691,21 +691,21 @@ static int pm8001_exec_internal_tmf_task(struct domain_device *dev,  		task->task_proto = dev->tproto;  		memcpy(&task->ssp_task, parameter, para_len);  		task->task_done = pm8001_task_done; -		task->timer.data = (unsigned long)task; -		task->timer.function = pm8001_tmf_timedout; -		task->timer.expires = jiffies + PM8001_TASK_TIMEOUT*HZ; -		add_timer(&task->timer); +		task->slow_task->timer.data = (unsigned long)task; +		task->slow_task->timer.function = pm8001_tmf_timedout; +		task->slow_task->timer.expires = jiffies + PM8001_TASK_TIMEOUT*HZ; +		add_timer(&task->slow_task->timer);  		res = pm8001_task_exec(task, 1, GFP_KERNEL, 1, tmf);  		if (res) { -			del_timer(&task->timer); +			del_timer(&task->slow_task->timer);  			PM8001_FAIL_DBG(pm8001_ha,  				pm8001_printk("Executing internal task "  				"failed\n"));  			goto ex_err;  		} -		wait_for_completion(&task->completion); +		wait_for_completion(&task->slow_task->completion);  		res = -TMF_RESP_FUNC_FAILED;  		/* Even TMF timed out, return direct. */  		if ((task->task_state_flags & SAS_TASK_STATE_ABORTED)) { @@ -765,17 +765,17 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha,  	struct sas_task *task = NULL;  	for (retry = 0; retry < 3; retry++) { -		task = sas_alloc_task(GFP_KERNEL); +		task = sas_alloc_slow_task(GFP_KERNEL);  		if (!task)  			return -ENOMEM;  		task->dev = dev;  		task->task_proto = dev->tproto;  		task->task_done = pm8001_task_done; -		task->timer.data = (unsigned long)task; -		task->timer.function = pm8001_tmf_timedout; -		task->timer.expires = jiffies + PM8001_TASK_TIMEOUT * HZ; -		add_timer(&task->timer); +		task->slow_task->timer.data = (unsigned long)task; +		task->slow_task->timer.function = pm8001_tmf_timedout; +		task->slow_task->timer.expires = jiffies + PM8001_TASK_TIMEOUT * HZ; +		add_timer(&task->slow_task->timer);  		res = pm8001_tag_alloc(pm8001_ha, &ccb_tag);  		if (res) @@ -789,13 +789,13 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha,  			pm8001_dev, flag, task_tag, ccb_tag);  		if (res) { -			del_timer(&task->timer); +			del_timer(&task->slow_task->timer);  			PM8001_FAIL_DBG(pm8001_ha,  				pm8001_printk("Executing internal task "  				"failed\n"));  			goto ex_err;  		} -		wait_for_completion(&task->completion); +		wait_for_completion(&task->slow_task->completion);  		res = TMF_RESP_FUNC_FAILED;  		/* Even TMF timed out, return direct. */  		if ((task->task_state_flags & SAS_TASK_STATE_ABORTED)) { @@ -962,8 +962,9 @@ int pm8001_I_T_nexus_reset(struct domain_device *dev)  	struct pm8001_device *pm8001_dev;  	struct pm8001_hba_info *pm8001_ha;  	struct sas_phy *phy; +  	if (!dev || !dev->lldd_dev) -		return -1; +		return -ENODEV;  	pm8001_dev = dev->lldd_dev;  	pm8001_ha = pm8001_find_ha_by_dev(dev);  | 
