Commit 06548160 authored by Johannes Thumshirn's avatar Johannes Thumshirn Committed by Martin K. Petersen

scsi: fc: use bsg_job_done

fc_bsg_jobdone() and bsg_job_done() are 1:1 copies now so use the
bsg-lib one instead of the FC private implementation.
Signed-off-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
Acked-by: default avatarTyrel Datwyler <tyreld@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 6aa858cd
......@@ -893,7 +893,7 @@ static void zfcp_fc_ct_els_job_handler(void *data)
jr->reply_payload_rcv_len = job->reply_payload.payload_len;
jr->reply_data.ctels_reply.status = FC_CTELS_STATUS_OK;
jr->result = zfcp_ct_els->status ? -EIO : 0;
fc_bsg_jobdone(job, jr->result, jr->reply_payload_rcv_len);
bsg_job_done(job, jr->result, jr->reply_payload_rcv_len);
}
static struct zfcp_fc_wka_port *zfcp_fc_job_wka_port(struct bsg_job *job)
......
......@@ -3179,7 +3179,7 @@ bfad_im_bsg_vendor_request(struct bsg_job *job)
bsg_reply->reply_payload_rcv_len = job->reply_payload.payload_len;
bsg_reply->result = rc;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rc;
error:
......@@ -3555,7 +3555,7 @@ bfad_im_bsg_els_ct_request(struct bsg_job *job)
bsg_reply->result = rc;
if (rc == BFA_STATUS_OK)
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rc;
......
......@@ -1946,7 +1946,7 @@ static int ibmvfc_bsg_request(struct bsg_job *job)
ibmvfc_free_event(evt);
spin_unlock_irqrestore(vhost->host->host_lock, flags);
bsg_reply->result = rc;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
rc = 0;
out:
......
......@@ -1912,7 +1912,7 @@ static void fc_lport_bsg_resp(struct fc_seq *sp, struct fc_frame *fp,
bsg_reply->result = (PTR_ERR(fp) == -FC_EX_CLOSED) ?
-ECONNABORTED : -ETIMEDOUT;
job->reply_len = sizeof(uint32_t);
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
kfree(info);
return;
......@@ -1947,7 +1947,7 @@ static void fc_lport_bsg_resp(struct fc_seq *sp, struct fc_frame *fp,
bsg_reply->reply_payload_rcv_len =
job->reply_payload.payload_len;
bsg_reply->result = 0;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
kfree(info);
}
......
......@@ -371,7 +371,7 @@ lpfc_bsg_send_mgmt_cmd_cmp(struct lpfc_hba *phba,
if (job) {
bsg_reply->result = rc;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
}
return;
......@@ -645,7 +645,7 @@ lpfc_bsg_rport_els_cmp(struct lpfc_hba *phba,
if (job) {
bsg_reply->result = rc;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
}
return;
......@@ -1138,7 +1138,7 @@ lpfc_bsg_ct_unsol_event(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
job->dd_data = NULL;
/* complete the job back to userspace */
spin_unlock_irqrestore(&phba->ct_ev_lock, flags);
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
spin_lock_irqsave(&phba->ct_ev_lock, flags);
}
......@@ -1364,7 +1364,7 @@ lpfc_bsg_hba_get_event(struct bsg_job *job)
spin_unlock_irqrestore(&phba->ct_ev_lock, flags);
job->dd_data = NULL;
bsg_reply->result = 0;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return 0;
......@@ -1462,7 +1462,7 @@ lpfc_issue_ct_rsp_cmp(struct lpfc_hba *phba,
if (job) {
bsg_reply->result = rc;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
}
return;
......@@ -1891,7 +1891,7 @@ lpfc_sli3_bsg_diag_loopback_mode(struct lpfc_hba *phba, struct bsg_job *job)
bsg_reply->result = rc;
/* complete the job back to userspace if no error */
if (rc == 0)
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rc;
}
......@@ -2181,7 +2181,7 @@ lpfc_sli4_bsg_diag_loopback_mode(struct lpfc_hba *phba, struct bsg_job *job)
bsg_reply->result = rc;
/* complete the job back to userspace if no error */
if (rc == 0)
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rc;
}
......@@ -2296,7 +2296,7 @@ lpfc_sli4_bsg_diag_mode_end(struct bsg_job *job)
bsg_reply->result = rc;
/* complete the job back to userspace if no error */
if (rc == 0)
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rc;
}
......@@ -2449,7 +2449,7 @@ lpfc_sli4_bsg_link_diag_test(struct bsg_job *job)
bsg_reply->result = rc;
/* complete the job back to userspace if no error */
if (rc == 0)
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rc;
}
......@@ -3310,7 +3310,7 @@ lpfc_bsg_diag_loopback_run(struct bsg_job *job)
job->dd_data = NULL;
/* complete the job back to userspace if no error */
if (rc == IOCB_SUCCESS)
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rc;
}
......@@ -3354,7 +3354,7 @@ lpfc_bsg_get_dfc_rev(struct bsg_job *job)
job_error:
bsg_reply->result = rc;
if (rc == 0)
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rc;
}
......@@ -3420,7 +3420,7 @@ lpfc_bsg_issue_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
if (job) {
bsg_reply->result = 0;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
}
return;
......@@ -3669,7 +3669,7 @@ lpfc_bsg_issue_read_mbox_ext_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
/* if the job is still active, call job done */
if (job) {
bsg_reply = job->reply;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
}
return;
......@@ -3707,7 +3707,7 @@ lpfc_bsg_issue_write_mbox_ext_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
/* if the job is still active, call job done */
if (job) {
bsg_reply = job->reply;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
}
......@@ -4150,7 +4150,7 @@ lpfc_bsg_sli_cfg_write_cmd_ext(struct lpfc_hba *phba, struct bsg_job *job,
/* wait for additoinal external buffers */
bsg_reply->result = 0;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return SLI_CONFIG_HANDLED;
......@@ -4377,7 +4377,7 @@ lpfc_bsg_read_ebuf_get(struct lpfc_hba *phba, struct bsg_job *job)
}
bsg_reply->result = 0;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return SLI_CONFIG_HANDLED;
......@@ -4494,7 +4494,7 @@ lpfc_bsg_write_ebuf_set(struct lpfc_hba *phba, struct bsg_job *job,
/* wait for additoinal external buffers */
bsg_reply->result = 0;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return SLI_CONFIG_HANDLED;
......@@ -4963,7 +4963,7 @@ lpfc_bsg_mbox_cmd(struct bsg_job *job)
/* job done */
bsg_reply->result = 0;
job->dd_data = NULL;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
} else if (rc == 1)
/* job submitted, will complete later*/
......@@ -5074,7 +5074,7 @@ lpfc_bsg_menlo_cmd_cmp(struct lpfc_hba *phba,
if (job) {
bsg_reply->result = rc;
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
}
......@@ -5293,7 +5293,7 @@ lpfc_forced_link_speed(struct bsg_job *job)
job_error:
bsg_reply->result = rc;
if (rc == 0)
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rc;
}
......
......@@ -21,7 +21,7 @@ qla2x00_bsg_job_done(void *data, void *ptr, int res)
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
bsg_reply->result = res;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
sp->free(vha, sp);
}
......@@ -244,7 +244,7 @@ qla24xx_proc_fcp_prio_cfg_cmd(struct bsg_job *bsg_job)
}
exit_fcp_prio_cfg:
if (!ret)
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return ret;
}
......@@ -942,7 +942,7 @@ qla2x00_process_loopback(struct bsg_job *bsg_job)
bsg_job->request_payload.sg_list,
bsg_job->request_payload.sg_cnt, DMA_TO_DEVICE);
if (!rval)
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rval;
}
......@@ -976,7 +976,7 @@ qla84xx_reset(struct bsg_job *bsg_job)
ql_dbg(ql_dbg_user, vha, 0x7031,
"Vendor request 84xx reset completed.\n");
bsg_reply->result = DID_OK;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
}
......@@ -1090,7 +1090,7 @@ qla84xx_updatefw(struct bsg_job *bsg_job)
bsg_job->request_payload.sg_cnt, DMA_TO_DEVICE);
if (!rval)
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rval;
}
......@@ -1288,7 +1288,7 @@ qla84xx_mgmt_cmd(struct bsg_job *bsg_job)
dma_pool_free(ha->s_dma_pool, mn, mn_dma);
if (!rval)
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rval;
}
......@@ -1375,7 +1375,7 @@ qla24xx_iidma(struct bsg_job *bsg_job)
}
bsg_reply->result = DID_OK;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
}
......@@ -1484,7 +1484,7 @@ qla2x00_read_optrom(struct bsg_job *bsg_job)
ha->optrom_buffer = NULL;
ha->optrom_state = QLA_SWAITING;
mutex_unlock(&ha->optrom_mutex);
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rval;
}
......@@ -1520,7 +1520,7 @@ qla2x00_update_optrom(struct bsg_job *bsg_job)
ha->optrom_buffer = NULL;
ha->optrom_state = QLA_SWAITING;
mutex_unlock(&ha->optrom_mutex);
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return rval;
}
......@@ -1571,7 +1571,7 @@ qla2x00_update_fru_versions(struct bsg_job *bsg_job)
done:
bsg_job->reply_len = sizeof(struct fc_bsg_reply);
bsg_reply->result = DID_OK << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return 0;
......@@ -1621,7 +1621,7 @@ qla2x00_read_fru_status(struct bsg_job *bsg_job)
bsg_job->reply_len = sizeof(struct fc_bsg_reply);
bsg_reply->reply_payload_rcv_len = sizeof(*sr);
bsg_reply->result = DID_OK << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return 0;
......@@ -1667,7 +1667,7 @@ qla2x00_write_fru_status(struct bsg_job *bsg_job)
done:
bsg_job->reply_len = sizeof(struct fc_bsg_reply);
bsg_reply->result = DID_OK << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return 0;
......@@ -1712,7 +1712,7 @@ qla2x00_write_i2c(struct bsg_job *bsg_job)
done:
bsg_job->reply_len = sizeof(struct fc_bsg_reply);
bsg_reply->result = DID_OK << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return 0;
......@@ -1761,7 +1761,7 @@ qla2x00_read_i2c(struct bsg_job *bsg_job)
bsg_job->reply_len = sizeof(struct fc_bsg_reply);
bsg_reply->reply_payload_rcv_len = sizeof(*i2c);
bsg_reply->result = DID_OK << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return 0;
......@@ -1940,7 +1940,7 @@ qla24xx_process_bidir_cmd(struct bsg_job *bsg_job)
bsg_job->reply_len = sizeof(struct fc_bsg_reply);
bsg_reply->reply_payload_rcv_len = 0;
bsg_reply->result = (DID_OK) << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
/* Always return success, vendor rsp carries correct status */
return 0;
......@@ -2106,7 +2106,7 @@ qla26xx_serdes_op(struct bsg_job *bsg_job)
bsg_job->reply_len = sizeof(struct fc_bsg_reply);
bsg_reply->result = DID_OK << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return 0;
}
......@@ -2148,7 +2148,7 @@ qla8044_serdes_op(struct bsg_job *bsg_job)
bsg_job->reply_len = sizeof(struct fc_bsg_reply);
bsg_reply->result = DID_OK << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return 0;
}
......@@ -2180,7 +2180,7 @@ qla27xx_get_flash_upd_cap(struct bsg_job *bsg_job)
bsg_job->reply_len = sizeof(struct fc_bsg_reply);
bsg_reply->result = DID_OK << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return 0;
}
......@@ -2226,7 +2226,7 @@ qla27xx_set_flash_upd_cap(struct bsg_job *bsg_job)
bsg_job->reply_len = sizeof(struct fc_bsg_reply);
bsg_reply->result = DID_OK << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return 0;
}
......@@ -2285,7 +2285,7 @@ qla27xx_get_bbcr_data(struct bsg_job *bsg_job)
bsg_job->reply_len = sizeof(struct fc_bsg_reply);
bsg_reply->result = DID_OK << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return 0;
}
......@@ -2342,7 +2342,7 @@ qla2x00_get_priv_stats(struct bsg_job *bsg_job)
bsg_job->reply_len = sizeof(*bsg_reply);
bsg_reply->result = DID_OK << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
dma_free_coherent(&ha->pdev->dev, sizeof(*stats),
......@@ -2386,7 +2386,7 @@ qla2x00_do_dport_diagnostics(struct bsg_job *bsg_job)
bsg_job->reply_len = sizeof(*bsg_reply);
bsg_reply->result = DID_OK << 16;
fc_bsg_jobdone(bsg_job, bsg_reply->result,
bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
kfree(dd);
......
......@@ -3555,41 +3555,6 @@ fc_vport_sched_delete(struct work_struct *work)
* BSG support
*/
/**
* fc_bsg_jobdone - completion routine for bsg requests that the LLD has
* completed
* @job: fc_bsg_job that is complete
* @result: job reply result
* @reply_payload_rcv_len: length of payload received
*/
void fc_bsg_jobdone(struct bsg_job *job, int result,
unsigned int reply_payload_rcv_len)
{
struct request *req = job->req;
struct request *rsp = req->next_rq;
int err;
err = job->req->errors = result;
if (err < 0)
/* we're only returning the result field in the reply */
job->req->sense_len = sizeof(uint32_t);
else
job->req->sense_len = job->reply_len;
/* we assume all request payload was transferred, residual == 0 */
req->resid_len = 0;
if (rsp) {
WARN_ON(reply_payload_rcv_len > rsp->resid_len);
/* set reply (bidi) residual */
rsp->resid_len -= min(reply_payload_rcv_len, rsp->resid_len);
}
blk_complete_request(req);
}
EXPORT_SYMBOL_GPL(fc_bsg_jobdone);
/**
* fc_bsg_job_timeout - handler for when a bsg request timesout
* @req: request that timed out
......@@ -3797,7 +3762,7 @@ fc_bsg_host_dispatch(struct request_queue *q, struct Scsi_Host *shost,
bsg_reply->reply_payload_rcv_len = 0;
bsg_reply->result = ret;
job->reply_len = sizeof(uint32_t);
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return FC_DISPATCH_UNLOCKED;
}
......@@ -3875,7 +3840,7 @@ fc_bsg_rport_dispatch(struct request_queue *q, struct Scsi_Host *shost,
bsg_reply->reply_payload_rcv_len = 0;
bsg_reply->result = ret;
job->reply_len = sizeof(uint32_t);
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
return FC_DISPATCH_UNLOCKED;
}
......@@ -3936,7 +3901,7 @@ fc_bsg_request_handler(struct request_queue *q, struct Scsi_Host *shost,
bsg_reply->reply_payload_rcv_len = 0;
bsg_reply->result = -ENOMSG;
job->reply_len = sizeof(uint32_t);
fc_bsg_jobdone(job, bsg_reply->result,
bsg_job_done(job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len);
spin_lock_irq(q->queue_lock);
continue;
......
......@@ -808,8 +808,6 @@ struct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel,
struct fc_vport_identifiers *);
int fc_vport_terminate(struct fc_vport *vport);
int fc_block_scsi_eh(struct scsi_cmnd *cmnd);
void fc_bsg_jobdone(struct bsg_job *job, int result,
unsigned int reply_payload_rcv_len);
static inline struct Scsi_Host *fc_bsg_to_shost(struct bsg_job *job)
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment