[SCSI] libfc: export seq_release() for users of seq_assign()
Target modules using lport->tt.seq_assign() get a hold on the exchange but have no way of releasing it. Add that. Signed-off-by: Joe Eykholt <jeykholt@cisco.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
committed by
James Bottomley
parent
04885b16a1
commit
62bdb6455e
@@ -1282,6 +1282,8 @@ free:
|
|||||||
* @fp: The request frame
|
* @fp: The request frame
|
||||||
*
|
*
|
||||||
* On success, the sequence pointer will be returned and also in fr_seq(@fp).
|
* On success, the sequence pointer will be returned and also in fr_seq(@fp).
|
||||||
|
* A reference will be held on the exchange/sequence for the caller, which
|
||||||
|
* must call fc_seq_release().
|
||||||
*/
|
*/
|
||||||
static struct fc_seq *fc_seq_assign(struct fc_lport *lport, struct fc_frame *fp)
|
static struct fc_seq *fc_seq_assign(struct fc_lport *lport, struct fc_frame *fp)
|
||||||
{
|
{
|
||||||
@@ -1298,6 +1300,15 @@ static struct fc_seq *fc_seq_assign(struct fc_lport *lport, struct fc_frame *fp)
|
|||||||
return fr_seq(fp);
|
return fr_seq(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fc_seq_release() - Release the hold
|
||||||
|
* @sp: The sequence.
|
||||||
|
*/
|
||||||
|
static void fc_seq_release(struct fc_seq *sp)
|
||||||
|
{
|
||||||
|
fc_exch_release(fc_seq_exch(sp));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fc_exch_recv_req() - Handler for an incoming request
|
* fc_exch_recv_req() - Handler for an incoming request
|
||||||
* @lport: The local port that received the request
|
* @lport: The local port that received the request
|
||||||
@@ -2369,6 +2380,9 @@ int fc_exch_init(struct fc_lport *lport)
|
|||||||
if (!lport->tt.seq_assign)
|
if (!lport->tt.seq_assign)
|
||||||
lport->tt.seq_assign = fc_seq_assign;
|
lport->tt.seq_assign = fc_seq_assign;
|
||||||
|
|
||||||
|
if (!lport->tt.seq_release)
|
||||||
|
lport->tt.seq_release = fc_seq_release;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(fc_exch_init);
|
EXPORT_SYMBOL(fc_exch_init);
|
||||||
|
@@ -571,6 +571,13 @@ struct libfc_function_template {
|
|||||||
*/
|
*/
|
||||||
struct fc_seq *(*seq_assign)(struct fc_lport *, struct fc_frame *);
|
struct fc_seq *(*seq_assign)(struct fc_lport *, struct fc_frame *);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Release the reference on the sequence returned by seq_assign().
|
||||||
|
*
|
||||||
|
* STATUS: OPTIONAL
|
||||||
|
*/
|
||||||
|
void (*seq_release)(struct fc_seq *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reset an exchange manager, completing all sequences and exchanges.
|
* Reset an exchange manager, completing all sequences and exchanges.
|
||||||
* If s_id is non-zero, reset only exchanges originating from that FID.
|
* If s_id is non-zero, reset only exchanges originating from that FID.
|
||||||
|
Reference in New Issue
Block a user