[SCSI] libfc: fix checking FC_TYPE_BLS
Its checked after skb freed, so instead have fh_type cached and then check FC_TYPE_BLS against cached fh_type value. This wrong check was causing double exch locking as reported by Bhanu at https://lists.open-fcoe.org/pipermail/devel/2011-October/011793.html Signed-off-by: Vasu Dev <vasu.dev@intel.com> Tested-by: Bhanu Prakash Gollapudi <bprakash@broadcom.com> Signed-off-by: Yi Zou <yi.zou@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
committed by
James Bottomley
parent
044aceef33
commit
14fc315fa3
@@ -469,6 +469,7 @@ static int fc_seq_send(struct fc_lport *lport, struct fc_seq *sp,
|
|||||||
struct fc_frame_header *fh = fc_frame_header_get(fp);
|
struct fc_frame_header *fh = fc_frame_header_get(fp);
|
||||||
int error;
|
int error;
|
||||||
u32 f_ctl;
|
u32 f_ctl;
|
||||||
|
u8 fh_type = fh->fh_type;
|
||||||
|
|
||||||
ep = fc_seq_exch(sp);
|
ep = fc_seq_exch(sp);
|
||||||
WARN_ON((ep->esb_stat & ESB_ST_SEQ_INIT) != ESB_ST_SEQ_INIT);
|
WARN_ON((ep->esb_stat & ESB_ST_SEQ_INIT) != ESB_ST_SEQ_INIT);
|
||||||
@@ -493,7 +494,7 @@ static int fc_seq_send(struct fc_lport *lport, struct fc_seq *sp,
|
|||||||
*/
|
*/
|
||||||
error = lport->tt.frame_send(lport, fp);
|
error = lport->tt.frame_send(lport, fp);
|
||||||
|
|
||||||
if (fh->fh_type == FC_TYPE_BLS)
|
if (fh_type == FC_TYPE_BLS)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user