diff --git a/drivers/scsi/bnx2fc/bnx2fc.h b/drivers/scsi/bnx2fc/bnx2fc.h index 8c8968ec8cb4..fde41224d31f 100644 --- a/drivers/scsi/bnx2fc/bnx2fc.h +++ b/drivers/scsi/bnx2fc/bnx2fc.h @@ -423,7 +423,8 @@ struct bnx2fc_cmd { struct scsi_cmnd *sc_cmd; struct bnx2fc_cmd_mgr *cmd_mgr; struct bnx2fc_mp_req mp_req; - void (*cb_func)(struct bnx2fc_els_cb_arg *cb_arg); + void (*cb_func)(struct bnx2fc_rport *tgt, + struct bnx2fc_els_cb_arg *cb_arg); struct bnx2fc_els_cb_arg *cb_arg; struct delayed_work timeout_work; /* timer for ULP timeouts */ struct completion abts_done; @@ -592,7 +593,8 @@ int bnx2fc_send_stat_req(struct bnx2fc_hba *hba); int bnx2fc_post_io_req(struct bnx2fc_rport *tgt, struct bnx2fc_cmd *io_req); int bnx2fc_send_rec(struct bnx2fc_cmd *orig_io_req); int bnx2fc_send_srr(struct bnx2fc_cmd *orig_io_req, u32 offset, u8 r_ctl); -void bnx2fc_process_seq_cleanup_compl(struct bnx2fc_cmd *seq_clnup_req, +void bnx2fc_process_seq_cleanup_compl(struct bnx2fc_rport *tgt, + struct bnx2fc_cmd *seq_clnp_req, struct fcoe_task_ctx_entry *task, u8 rx_state); int bnx2fc_initiate_seq_cleanup(struct bnx2fc_cmd *orig_io_req, u32 offset, diff --git a/drivers/scsi/bnx2fc/bnx2fc_els.c b/drivers/scsi/bnx2fc/bnx2fc_els.c index 749e30aaf926..5191d87fb446 100644 --- a/drivers/scsi/bnx2fc/bnx2fc_els.c +++ b/drivers/scsi/bnx2fc/bnx2fc_els.c @@ -22,10 +22,12 @@ static void bnx2fc_flogi_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg); static int bnx2fc_initiate_els(struct bnx2fc_rport *tgt, unsigned int op, void *data, u32 data_len, - void (*cb_func)(struct bnx2fc_els_cb_arg *cb_arg), + void (*cb_func)(struct bnx2fc_rport *tgt, + struct bnx2fc_els_cb_arg *cb_arg), struct bnx2fc_els_cb_arg *cb_arg, u32 timer_msec); -static void bnx2fc_rrq_compl(struct bnx2fc_els_cb_arg *cb_arg) +static void bnx2fc_rrq_compl(struct bnx2fc_rport *tgt, + struct bnx2fc_els_cb_arg *cb_arg) { struct bnx2fc_cmd *orig_io_req; struct bnx2fc_cmd *rrq_req; @@ -119,10 +121,10 @@ int bnx2fc_send_rrq(struct bnx2fc_cmd *aborted_io_req) return rc; } -static void bnx2fc_l2_els_compl(struct bnx2fc_els_cb_arg *cb_arg) +static void bnx2fc_l2_els_compl(struct bnx2fc_rport *tgt, + struct bnx2fc_els_cb_arg *cb_arg) { struct bnx2fc_cmd *els_req; - struct bnx2fc_rport *tgt; struct bnx2fc_mp_req *mp_req; struct fc_frame_header *fc_hdr; unsigned char *buf; @@ -150,7 +152,6 @@ static void bnx2fc_l2_els_compl(struct bnx2fc_els_cb_arg *cb_arg) goto free_arg; } - tgt = els_req->tgt; mp_req = &(els_req->mp_req); fc_hdr = &(mp_req->resp_fc_hdr); resp_len = mp_req->resp_len; @@ -262,7 +263,8 @@ int bnx2fc_send_rls(struct bnx2fc_rport *tgt, struct fc_frame *fp) return rc; } -static void bnx2fc_srr_compl(struct bnx2fc_els_cb_arg *cb_arg) +static void bnx2fc_srr_compl(struct bnx2fc_rport *tgt, + struct bnx2fc_els_cb_arg *cb_arg) { struct bnx2fc_mp_req *mp_req; struct fc_frame_header *fc_hdr, *fh; @@ -296,7 +298,6 @@ static void bnx2fc_srr_compl(struct bnx2fc_els_cb_arg *cb_arg) } orig_io_req->srr_retry++; if (orig_io_req->srr_retry <= SRR_RETRY_COUNT) { - struct bnx2fc_rport *tgt = orig_io_req->tgt; spin_unlock_bh(&tgt->tgt_lock); rc = bnx2fc_send_srr(orig_io_req, orig_io_req->srr_offset, @@ -372,7 +373,8 @@ static void bnx2fc_srr_compl(struct bnx2fc_els_cb_arg *cb_arg) kref_put(&orig_io_req->refcount, bnx2fc_cmd_release); } -static void bnx2fc_rec_compl(struct bnx2fc_els_cb_arg *cb_arg) +static void bnx2fc_rec_compl(struct bnx2fc_rport *tgt, + struct bnx2fc_els_cb_arg *cb_arg) { struct bnx2fc_cmd *orig_io_req, *new_io_req; struct bnx2fc_cmd *rec_req; @@ -380,7 +382,6 @@ static void bnx2fc_rec_compl(struct bnx2fc_els_cb_arg *cb_arg) struct fc_frame_header *fc_hdr, *fh; struct fc_els_ls_rjt *rjt; struct fc_els_rec_acc *acc; - struct bnx2fc_rport *tgt; struct fcoe_err_report_entry *err_entry; struct scsi_cmnd *sc_cmd; enum fc_rctl r_ctl; @@ -399,7 +400,6 @@ static void bnx2fc_rec_compl(struct bnx2fc_els_cb_arg *cb_arg) rec_req = cb_arg->io_req; orig_io_req = cb_arg->aborted_io_req; BNX2FC_IO_DBG(rec_req, "rec_compl: orig xid = 0x%x", orig_io_req->xid); - tgt = orig_io_req->tgt; /* Handle REC timeout case */ if (test_and_clear_bit(BNX2FC_FLAG_ELS_TIMEOUT, &rec_req->req_flags)) { @@ -669,7 +669,8 @@ int bnx2fc_send_srr(struct bnx2fc_cmd *orig_io_req, u32 offset, u8 r_ctl) static int bnx2fc_initiate_els(struct bnx2fc_rport *tgt, unsigned int op, void *data, u32 data_len, - void (*cb_func)(struct bnx2fc_els_cb_arg *cb_arg), + void (*cb_func)(struct bnx2fc_rport *tgt, + struct bnx2fc_els_cb_arg *cb_arg), struct bnx2fc_els_cb_arg *cb_arg, u32 timer_msec) { struct fcoe_port *port = tgt->port; @@ -847,7 +848,7 @@ void bnx2fc_process_els_compl(struct bnx2fc_cmd *els_req, /* Parse ELS response */ if ((els_req->cb_func) && (els_req->cb_arg)) { - els_req->cb_func(els_req->cb_arg); + els_req->cb_func(els_req->tgt, els_req->cb_arg); els_req->cb_arg = NULL; } diff --git a/drivers/scsi/bnx2fc/bnx2fc_hwi.c b/drivers/scsi/bnx2fc/bnx2fc_hwi.c index a5ecb87d5b2d..833ec0e35731 100644 --- a/drivers/scsi/bnx2fc/bnx2fc_hwi.c +++ b/drivers/scsi/bnx2fc/bnx2fc_hwi.c @@ -943,7 +943,7 @@ void bnx2fc_process_cq_compl(struct bnx2fc_rport *tgt, u16 wqe, case BNX2FC_SEQ_CLEANUP: BNX2FC_IO_DBG(io_req, "cq_compl(0x%x) - seq cleanup resp\n", io_req->xid); - bnx2fc_process_seq_cleanup_compl(io_req, task, rx_state); + bnx2fc_process_seq_cleanup_compl(tgt, io_req, task, rx_state); kref_put(&io_req->refcount, bnx2fc_cmd_release); break; diff --git a/drivers/scsi/bnx2fc/bnx2fc_io.c b/drivers/scsi/bnx2fc/bnx2fc_io.c index 9c7a541a4523..82d70ccfc59b 100644 --- a/drivers/scsi/bnx2fc/bnx2fc_io.c +++ b/drivers/scsi/bnx2fc/bnx2fc_io.c @@ -142,7 +142,7 @@ static void bnx2fc_cmd_timeout(struct work_struct *work) set_bit(BNX2FC_FLAG_ELS_TIMEOUT, &io_req->req_flags); if ((io_req->cb_func) && (io_req->cb_arg)) { - io_req->cb_func(io_req->cb_arg); + io_req->cb_func(tgt, io_req->cb_arg); io_req->cb_arg = NULL; } } @@ -1079,10 +1079,10 @@ int bnx2fc_eh_device_reset(struct scsi_cmnd *sc_cmd) FCP_TMF_LUN_RESET); } -static int bnx2fc_abts_cleanup(struct bnx2fc_cmd *io_req) +static int bnx2fc_abts_cleanup(struct bnx2fc_rport *tgt, + struct bnx2fc_cmd *io_req) __must_hold(&tgt->tgt_lock) { - struct bnx2fc_rport *tgt = io_req->tgt; unsigned int time_left; init_completion(&io_req->cleanup_done); @@ -1212,7 +1212,7 @@ int bnx2fc_eh_abort(struct scsi_cmnd *sc_cmd) * cleanup the command and return that I/O was successfully * aborted. */ - bnx2fc_abts_cleanup(io_req); + bnx2fc_abts_cleanup(tgt, io_req); /* This only occurs when an task abort was requested while ABTS is in progress. Setting the IO_CLEANUP flag will skip the RRQ process in the case when the fw generated SCSI_CMD cmpl @@ -1262,7 +1262,7 @@ int bnx2fc_eh_abort(struct scsi_cmnd *sc_cmd) * Cleanup firmware residuals before returning control back * to SCSI ML. */ - rc = bnx2fc_abts_cleanup(io_req); + rc = bnx2fc_abts_cleanup(tgt, io_req); goto done; } else { /* @@ -1282,7 +1282,8 @@ int bnx2fc_eh_abort(struct scsi_cmnd *sc_cmd) return rc; } -void bnx2fc_process_seq_cleanup_compl(struct bnx2fc_cmd *seq_clnp_req, +void bnx2fc_process_seq_cleanup_compl(struct bnx2fc_rport *tgt, + struct bnx2fc_cmd *seq_clnp_req, struct fcoe_task_ctx_entry *task, u8 rx_state) { @@ -1291,7 +1292,6 @@ void bnx2fc_process_seq_cleanup_compl(struct bnx2fc_cmd *seq_clnp_req, u32 offset = cb_arg->offset; enum fc_rctl r_ctl = cb_arg->r_ctl; int rc = 0; - struct bnx2fc_rport *tgt = orig_io_req->tgt; BNX2FC_IO_DBG(orig_io_req, "Entered process_cleanup_compl xid = 0x%x" "cmd_type = %d\n", diff --git a/drivers/scsi/bnx2fc/bnx2fc_tgt.c b/drivers/scsi/bnx2fc/bnx2fc_tgt.c index 77dcdfc412b1..e6942cb6cae6 100644 --- a/drivers/scsi/bnx2fc/bnx2fc_tgt.c +++ b/drivers/scsi/bnx2fc/bnx2fc_tgt.c @@ -224,7 +224,7 @@ void bnx2fc_flush_active_ios(struct bnx2fc_rport *tgt) bnx2fc_cmd_release); /* drop timer hold */ if ((io_req->cb_func) && (io_req->cb_arg)) { - io_req->cb_func(io_req->cb_arg); + io_req->cb_func(tgt, io_req->cb_arg); io_req->cb_arg = NULL; }