Commit 768c72cc authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Martin K. Petersen

scsi: libfc: Replace ->exch_done callback with function call

The ->exch_done callback only ever had one implementation,
so we can as well call it directly and drop the callback.
Signed-off-by: default avatarHannes Reinecke <hare@suse.com>
Acked-by: default avatarJohannes Thumshirn <jth@kernel.org>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 0ebaed17
...@@ -969,7 +969,7 @@ static struct fc_exch *fc_exch_find(struct fc_exch_mgr *mp, u16 xid) ...@@ -969,7 +969,7 @@ static struct fc_exch *fc_exch_find(struct fc_exch_mgr *mp, u16 xid)
* *
* Note: May sleep if invoked from outside a response handler. * Note: May sleep if invoked from outside a response handler.
*/ */
static void fc_exch_done(struct fc_seq *sp) void fc_exch_done(struct fc_seq *sp)
{ {
struct fc_exch *ep = fc_seq_exch(sp); struct fc_exch *ep = fc_seq_exch(sp);
int rc; int rc;
...@@ -982,6 +982,7 @@ static void fc_exch_done(struct fc_seq *sp) ...@@ -982,6 +982,7 @@ static void fc_exch_done(struct fc_seq *sp)
if (!rc) if (!rc)
fc_exch_delete(ep); fc_exch_delete(ep);
} }
EXPORT_SYMBOL(fc_exch_done);
/** /**
* fc_exch_resp() - Allocate a new exchange for a response frame * fc_exch_resp() - Allocate a new exchange for a response frame
...@@ -2654,9 +2655,6 @@ int fc_exch_init(struct fc_lport *lport) ...@@ -2654,9 +2655,6 @@ int fc_exch_init(struct fc_lport *lport)
if (!lport->tt.seq_set_resp) if (!lport->tt.seq_set_resp)
lport->tt.seq_set_resp = fc_seq_set_resp; lport->tt.seq_set_resp = fc_seq_set_resp;
if (!lport->tt.exch_done)
lport->tt.exch_done = fc_exch_done;
if (!lport->tt.exch_mgr_reset) if (!lport->tt.exch_mgr_reset)
lport->tt.exch_mgr_reset = fc_exch_mgr_reset; lport->tt.exch_mgr_reset = fc_exch_mgr_reset;
......
...@@ -311,7 +311,7 @@ static int fc_fcp_send_abort(struct fc_fcp_pkt *fsp) ...@@ -311,7 +311,7 @@ static int fc_fcp_send_abort(struct fc_fcp_pkt *fsp)
static void fc_fcp_retry_cmd(struct fc_fcp_pkt *fsp, int status_code) static void fc_fcp_retry_cmd(struct fc_fcp_pkt *fsp, int status_code)
{ {
if (fsp->seq_ptr) { if (fsp->seq_ptr) {
fsp->lp->tt.exch_done(fsp->seq_ptr); fc_exch_done(fsp->seq_ptr);
fsp->seq_ptr = NULL; fsp->seq_ptr = NULL;
} }
...@@ -1036,7 +1036,7 @@ static void fc_fcp_complete_locked(struct fc_fcp_pkt *fsp) ...@@ -1036,7 +1036,7 @@ static void fc_fcp_complete_locked(struct fc_fcp_pkt *fsp)
fc_seq_send(lport, csp, conf_frame); fc_seq_send(lport, csp, conf_frame);
} }
} }
lport->tt.exch_done(seq); fc_exch_done(seq);
} }
/* /*
* Some resets driven by SCSI are not I/Os and do not have * Some resets driven by SCSI are not I/Os and do not have
...@@ -1054,10 +1054,8 @@ static void fc_fcp_complete_locked(struct fc_fcp_pkt *fsp) ...@@ -1054,10 +1054,8 @@ static void fc_fcp_complete_locked(struct fc_fcp_pkt *fsp)
*/ */
static void fc_fcp_cleanup_cmd(struct fc_fcp_pkt *fsp, int error) static void fc_fcp_cleanup_cmd(struct fc_fcp_pkt *fsp, int error)
{ {
struct fc_lport *lport = fsp->lp;
if (fsp->seq_ptr) { if (fsp->seq_ptr) {
lport->tt.exch_done(fsp->seq_ptr); fc_exch_done(fsp->seq_ptr);
fsp->seq_ptr = NULL; fsp->seq_ptr = NULL;
} }
fsp->status_code = error; fsp->status_code = error;
...@@ -1349,7 +1347,7 @@ static int fc_lun_reset(struct fc_lport *lport, struct fc_fcp_pkt *fsp, ...@@ -1349,7 +1347,7 @@ static int fc_lun_reset(struct fc_lport *lport, struct fc_fcp_pkt *fsp,
spin_lock_bh(&fsp->scsi_pkt_lock); spin_lock_bh(&fsp->scsi_pkt_lock);
if (fsp->seq_ptr) { if (fsp->seq_ptr) {
lport->tt.exch_done(fsp->seq_ptr); fc_exch_done(fsp->seq_ptr);
fsp->seq_ptr = NULL; fsp->seq_ptr = NULL;
} }
fsp->wait_for_comp = 0; fsp->wait_for_comp = 0;
...@@ -1403,7 +1401,7 @@ static void fc_tm_done(struct fc_seq *seq, struct fc_frame *fp, void *arg) ...@@ -1403,7 +1401,7 @@ static void fc_tm_done(struct fc_seq *seq, struct fc_frame *fp, void *arg)
if (fh->fh_type != FC_TYPE_BLS) if (fh->fh_type != FC_TYPE_BLS)
fc_fcp_resp(fsp, fp); fc_fcp_resp(fsp, fp);
fsp->seq_ptr = NULL; fsp->seq_ptr = NULL;
fsp->lp->tt.exch_done(seq); fc_exch_done(seq);
out_unlock: out_unlock:
fc_fcp_unlock_pkt(fsp); fc_fcp_unlock_pkt(fsp);
out: out:
...@@ -1793,9 +1791,9 @@ static void fc_fcp_srr_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg) ...@@ -1793,9 +1791,9 @@ static void fc_fcp_srr_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg)
fh = fc_frame_header_get(fp); fh = fc_frame_header_get(fp);
/* /*
* BUG? fc_fcp_srr_error calls exch_done which would release * BUG? fc_fcp_srr_error calls fc_exch_done which would release
* the ep. But if fc_fcp_srr_error had got -FC_EX_TIMEOUT, * the ep. But if fc_fcp_srr_error had got -FC_EX_TIMEOUT,
* then fc_exch_timeout would be sending an abort. The exch_done * then fc_exch_timeout would be sending an abort. The fc_exch_done
* call by fc_fcp_srr_error would prevent fc_exch.c from seeing * call by fc_fcp_srr_error would prevent fc_exch.c from seeing
* an abort response though. * an abort response though.
*/ */
...@@ -1816,7 +1814,7 @@ static void fc_fcp_srr_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg) ...@@ -1816,7 +1814,7 @@ static void fc_fcp_srr_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg)
} }
fc_fcp_unlock_pkt(fsp); fc_fcp_unlock_pkt(fsp);
out: out:
fsp->lp->tt.exch_done(seq); fc_exch_done(seq);
fc_frame_free(fp); fc_frame_free(fp);
} }
...@@ -1846,7 +1844,7 @@ static void fc_fcp_srr_error(struct fc_fcp_pkt *fsp, struct fc_frame *fp) ...@@ -1846,7 +1844,7 @@ static void fc_fcp_srr_error(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
} }
fc_fcp_unlock_pkt(fsp); fc_fcp_unlock_pkt(fsp);
out: out:
fsp->lp->tt.exch_done(fsp->recov_seq); fc_exch_done(fsp->recov_seq);
} }
/** /**
......
...@@ -980,7 +980,7 @@ void fc_lport_recv(struct fc_lport *lport, struct fc_frame *fp) ...@@ -980,7 +980,7 @@ void fc_lport_recv(struct fc_lport *lport, struct fc_frame *fp)
FC_LPORT_DBG(lport, "dropping unexpected frame type %x\n", fh->fh_type); FC_LPORT_DBG(lport, "dropping unexpected frame type %x\n", fh->fh_type);
fc_frame_free(fp); fc_frame_free(fp);
if (sp) if (sp)
lport->tt.exch_done(sp); fc_exch_done(sp);
} }
EXPORT_SYMBOL(fc_lport_recv); EXPORT_SYMBOL(fc_lport_recv);
......
...@@ -177,7 +177,7 @@ int ft_queue_status(struct se_cmd *se_cmd) ...@@ -177,7 +177,7 @@ int ft_queue_status(struct se_cmd *se_cmd)
se_cmd->scsi_status = SAM_STAT_TASK_SET_FULL; se_cmd->scsi_status = SAM_STAT_TASK_SET_FULL;
return -ENOMEM; return -ENOMEM;
} }
lport->tt.exch_done(cmd->seq); fc_exch_done(cmd->seq);
/* /*
* Drop the extra ACK_KREF reference taken by target_submit_cmd() * Drop the extra ACK_KREF reference taken by target_submit_cmd()
* ahead of ft_check_stop_free() -> transport_generic_free_cmd() * ahead of ft_check_stop_free() -> transport_generic_free_cmd()
...@@ -324,7 +324,7 @@ static void ft_send_resp_status(struct fc_lport *lport, ...@@ -324,7 +324,7 @@ static void ft_send_resp_status(struct fc_lport *lport,
sp = fr_seq(fp); sp = fr_seq(fp);
if (sp) { if (sp) {
fc_seq_send(lport, sp, fp); fc_seq_send(lport, sp, fp);
lport->tt.exch_done(sp); fc_exch_done(sp);
} else { } else {
lport->tt.frame_send(lport, fp); lport->tt.frame_send(lport, fp);
} }
......
...@@ -514,14 +514,6 @@ struct libfc_function_template { ...@@ -514,14 +514,6 @@ struct libfc_function_template {
*/ */
void (*get_lesb)(struct fc_lport *, struct fc_els_lesb *lesb); void (*get_lesb)(struct fc_lport *, struct fc_els_lesb *lesb);
/*
* Indicate that an exchange/sequence tuple is complete and the memory
* allocated for the related objects may be freed.
*
* STATUS: OPTIONAL
*/
void (*exch_done)(struct fc_seq *);
/* /*
* Start a new sequence on the same exchange/sequence tuple. * Start a new sequence on the same exchange/sequence tuple.
* *
...@@ -1040,6 +1032,7 @@ void fc_exch_recv(struct fc_lport *, struct fc_frame *); ...@@ -1040,6 +1032,7 @@ void fc_exch_recv(struct fc_lport *, struct fc_frame *);
void fc_exch_mgr_reset(struct fc_lport *, u32 s_id, u32 d_id); void fc_exch_mgr_reset(struct fc_lport *, u32 s_id, u32 d_id);
int fc_seq_send(struct fc_lport *lport, struct fc_seq *sp, struct fc_frame *fp); int fc_seq_send(struct fc_lport *lport, struct fc_seq *sp, struct fc_frame *fp);
int fc_seq_exch_abort(const struct fc_seq *, unsigned int timer_msec); int fc_seq_exch_abort(const struct fc_seq *, unsigned int timer_msec);
void fc_exch_done(struct fc_seq *sp);
/* /*
* Functions for fc_functions_template * Functions for fc_functions_template
......
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