diff options
Diffstat (limited to 'drivers/scsi/mpt3sas')
| -rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_base.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_base.h | 2 | ||||
| -rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_ctl.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_scsih.c | 24 | ||||
| -rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_transport.c | 39 | 
5 files changed, 32 insertions, 37 deletions
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c index fa785062e97..0cf4f7000f9 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.c +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c @@ -131,7 +131,7 @@ static int mpt3sas_remove_dead_ioc_func(void *arg)  	pdev = ioc->pdev;  	if ((pdev == NULL))  		return -1; -	pci_stop_and_remove_bus_device(pdev); +	pci_stop_and_remove_bus_device_locked(pdev);  	return 0;  } diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h index 0ebf5d913c8..9b90a6fef70 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.h +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h @@ -993,7 +993,7 @@ void mpt3sas_scsih_reset_handler(struct MPT3SAS_ADAPTER *ioc, int reset_phase);  int mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle,  	uint channel, uint id, uint lun, u8 type, u16 smid_task, -	ulong timeout, unsigned long serial_number,  enum mutex_type m_type); +	ulong timeout, enum mutex_type m_type);  void mpt3sas_scsih_set_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle);  void mpt3sas_scsih_clear_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle);  void mpt3sas_expander_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address); diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c index 9b89de14a0a..ba9cbe598a9 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c +++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c @@ -980,7 +980,7 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg,  			mpt3sas_scsih_issue_tm(ioc,  			    le16_to_cpu(mpi_request->FunctionDependent1), 0, 0,  			    0, MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET, 0, 30, -			    0, TM_MUTEX_ON); +			    TM_MUTEX_ON);  		} else  			mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP,  			    FORCE_BIG_HAMMER); diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c index a961fe11b52..18e713db1d3 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c @@ -2029,7 +2029,6 @@ mpt3sas_scsih_clear_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle)   * @type: MPI2_SCSITASKMGMT_TASKTYPE__XXX (defined in mpi2_init.h)   * @smid_task: smid assigned to the task   * @timeout: timeout in seconds - * @serial_number: the serial_number from scmd   * @m_type: TM_MUTEX_ON or TM_MUTEX_OFF   * Context: user   * @@ -2042,7 +2041,7 @@ mpt3sas_scsih_clear_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle)  int  mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, uint channel,  	uint id, uint lun, u8 type, u16 smid_task, ulong timeout, -	unsigned long serial_number, enum mutex_type m_type) +	enum mutex_type m_type)  {  	Mpi2SCSITaskManagementRequest_t *mpi_request;  	Mpi2SCSITaskManagementReply_t *mpi_reply; @@ -2293,8 +2292,7 @@ _scsih_abort(struct scsi_cmnd *scmd)  	handle = sas_device_priv_data->sas_target->handle;  	r = mpt3sas_scsih_issue_tm(ioc, handle, scmd->device->channel,  	    scmd->device->id, scmd->device->lun, -	    MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK, smid, 30, -	    scmd->serial_number, TM_MUTEX_ON); +	    MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK, smid, 30, TM_MUTEX_ON);   out:  	sdev_printk(KERN_INFO, scmd->device, "task abort: %s scmd(%p)\n", @@ -2353,8 +2351,7 @@ _scsih_dev_reset(struct scsi_cmnd *scmd)  	r = mpt3sas_scsih_issue_tm(ioc, handle, scmd->device->channel,  	    scmd->device->id, scmd->device->lun, -	    MPI2_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET, 0, 30, 0, -	    TM_MUTEX_ON); +	    MPI2_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET, 0, 30, TM_MUTEX_ON);   out:  	sdev_printk(KERN_INFO, scmd->device, "device reset: %s scmd(%p)\n", @@ -2414,7 +2411,7 @@ _scsih_target_reset(struct scsi_cmnd *scmd)  	r = mpt3sas_scsih_issue_tm(ioc, handle, scmd->device->channel,  	    scmd->device->id, 0, MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET, 0, -	    30, 0, TM_MUTEX_ON); +	    30, TM_MUTEX_ON);   out:  	starget_printk(KERN_INFO, starget, "target reset: %s scmd(%p)\n", @@ -3518,7 +3515,7 @@ _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)  /** - * _scsih_qcmd_lck - main scsi request entry point + * _scsih_qcmd - main scsi request entry point   * @scmd: pointer to scsi command object   * @done: function pointer to be invoked on completion   * @@ -3529,9 +3526,9 @@ _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)   * SCSI_MLQUEUE_HOST_BUSY if the entire host queue is full   */  static int -_scsih_qcmd_lck(struct scsi_cmnd *scmd, void (*done)(struct scsi_cmnd *)) +_scsih_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *scmd)  { -	struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); +	struct MPT3SAS_ADAPTER *ioc = shost_priv(shost);  	struct MPT3SAS_DEVICE *sas_device_priv_data;  	struct MPT3SAS_TARGET *sas_target_priv_data;  	Mpi2SCSIIORequest_t *mpi_request; @@ -3544,7 +3541,6 @@ _scsih_qcmd_lck(struct scsi_cmnd *scmd, void (*done)(struct scsi_cmnd *))  		scsi_print_command(scmd);  #endif -	scmd->scsi_done = done;  	sas_device_priv_data = scmd->device->hostdata;  	if (!sas_device_priv_data || !sas_device_priv_data->sas_target) {  		scmd->result = DID_NO_CONNECT << 16; @@ -3659,8 +3655,6 @@ _scsih_qcmd_lck(struct scsi_cmnd *scmd, void (*done)(struct scsi_cmnd *))   out:  	return SCSI_MLQUEUE_HOST_BUSY;  } -static DEF_SCSI_QCMD(_scsih_qcmd) -  /**   * _scsih_normalize_sense - normalize descriptor and fixed format sense data @@ -5425,7 +5419,7 @@ _scsih_sas_broadcast_primitive_event(struct MPT3SAS_ADAPTER *ioc,  		spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);  		r = mpt3sas_scsih_issue_tm(ioc, handle, 0, 0, lun, -		    MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK, smid, 30, 0, +		    MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK, smid, 30,  		    TM_MUTEX_OFF);  		if (r == FAILED) {  			sdev_printk(KERN_WARNING, sdev, @@ -5467,7 +5461,7 @@ _scsih_sas_broadcast_primitive_event(struct MPT3SAS_ADAPTER *ioc,  		r = mpt3sas_scsih_issue_tm(ioc, handle, sdev->channel, sdev->id,  		    sdev->lun, MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK, smid, 30, -		    scmd->serial_number, TM_MUTEX_OFF); +		    TM_MUTEX_OFF);  		if (r == FAILED) {  			sdev_printk(KERN_WARNING, sdev,  			    "mpt3sas_scsih_issue_tm: ABORT_TASK: FAILED : " diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c index e771a88c6a7..65170cb1a00 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_transport.c +++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c @@ -1884,7 +1884,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  	struct MPT3SAS_ADAPTER *ioc = shost_priv(shost);  	Mpi2SmpPassthroughRequest_t *mpi_request;  	Mpi2SmpPassthroughReply_t *mpi_reply; -	int rc, i; +	int rc;  	u16 smid;  	u32 ioc_state;  	unsigned long timeleft; @@ -1898,7 +1898,8 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  	void *pci_addr_out = NULL;  	u16 wait_state_count;  	struct request *rsp = req->next_rq; -	struct bio_vec *bvec = NULL; +	struct bio_vec bvec; +	struct bvec_iter iter;  	if (!rsp) {  		pr_err(MPT3SAS_FMT "%s: the smp response space is missing\n", @@ -1925,7 +1926,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  	ioc->transport_cmds.status = MPT3_CMD_PENDING;  	/* Check if the request is split across multiple segments */ -	if (req->bio->bi_vcnt > 1) { +	if (bio_multiple_segments(req->bio)) {  		u32 offset = 0;  		/* Allocate memory and copy the request */ @@ -1938,11 +1939,11 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  			goto out;  		} -		bio_for_each_segment(bvec, req->bio, i) { +		bio_for_each_segment(bvec, req->bio, iter) {  			memcpy(pci_addr_out + offset, -			    page_address(bvec->bv_page) + bvec->bv_offset, -			    bvec->bv_len); -			offset += bvec->bv_len; +			    page_address(bvec.bv_page) + bvec.bv_offset, +			    bvec.bv_len); +			offset += bvec.bv_len;  		}  	} else {  		dma_addr_out = pci_map_single(ioc->pdev, bio_data(req->bio), @@ -1957,7 +1958,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  	/* Check if the response needs to be populated across  	 * multiple segments */ -	if (rsp->bio->bi_vcnt > 1) { +	if (bio_multiple_segments(rsp->bio)) {  		pci_addr_in = pci_alloc_consistent(ioc->pdev, blk_rq_bytes(rsp),  		    &pci_dma_in);  		if (!pci_addr_in) { @@ -2018,7 +2019,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  	mpi_request->RequestDataLength = cpu_to_le16(blk_rq_bytes(req) - 4);  	psge = &mpi_request->SGL; -	if (req->bio->bi_vcnt > 1) +	if (bio_multiple_segments(req->bio))  		ioc->build_sg(ioc, psge, pci_dma_out, (blk_rq_bytes(req) - 4),  		    pci_dma_in, (blk_rq_bytes(rsp) + 4));  	else @@ -2063,23 +2064,23 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  		/* check if the resp needs to be copied from the allocated  		 * pci mem */ -		if (rsp->bio->bi_vcnt > 1) { +		if (bio_multiple_segments(rsp->bio)) {  			u32 offset = 0;  			u32 bytes_to_copy =  			    le16_to_cpu(mpi_reply->ResponseDataLength); -			bio_for_each_segment(bvec, rsp->bio, i) { -				if (bytes_to_copy <= bvec->bv_len) { -					memcpy(page_address(bvec->bv_page) + -					    bvec->bv_offset, pci_addr_in + +			bio_for_each_segment(bvec, rsp->bio, iter) { +				if (bytes_to_copy <= bvec.bv_len) { +					memcpy(page_address(bvec.bv_page) + +					    bvec.bv_offset, pci_addr_in +  					    offset, bytes_to_copy);  					break;  				} else { -					memcpy(page_address(bvec->bv_page) + -					    bvec->bv_offset, pci_addr_in + -					    offset, bvec->bv_len); -					bytes_to_copy -= bvec->bv_len; +					memcpy(page_address(bvec.bv_page) + +					    bvec.bv_offset, pci_addr_in + +					    offset, bvec.bv_len); +					bytes_to_copy -= bvec.bv_len;  				} -				offset += bvec->bv_len; +				offset += bvec.bv_len;  			}  		}  	} else {  | 
