diff options
author | Vasu Dev <vasu.dev@intel.com> | 2009-02-27 13:54:51 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-03-06 16:37:23 -0500 |
commit | a7e84f2b83f17f8f11da34ccef3ba5a862dc0182 (patch) | |
tree | 7cfe6e926cafbd1877e702456b631086d1b8a85c /drivers/scsi | |
parent | 78342da3682ec843e3e6301af5c723c88a46c408 (diff) |
[SCSI] libfc: fixed a soft lockup issue in fc_exch_recv_abts
The fc_seq_start_next grabs ep->ex_lock but this lock was already held here,
so instead called fc_seq_start_next_locked to avoid soft lockup.
Signed-off-by: Vasu Dev <vasu.dev@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/libfc/fc_exch.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c index e874e77b740c..dd269e5f953e 100644 --- a/drivers/scsi/libfc/fc_exch.c +++ b/drivers/scsi/libfc/fc_exch.c | |||
@@ -1096,7 +1096,7 @@ static void fc_exch_recv_abts(struct fc_exch *ep, struct fc_frame *rx_fp) | |||
1096 | ap->ba_high_seq_cnt = fh->fh_seq_cnt; | 1096 | ap->ba_high_seq_cnt = fh->fh_seq_cnt; |
1097 | ap->ba_low_seq_cnt = htons(sp->cnt); | 1097 | ap->ba_low_seq_cnt = htons(sp->cnt); |
1098 | } | 1098 | } |
1099 | sp = fc_seq_start_next(sp); | 1099 | sp = fc_seq_start_next_locked(sp); |
1100 | spin_unlock_bh(&ep->ex_lock); | 1100 | spin_unlock_bh(&ep->ex_lock); |
1101 | fc_seq_send_last(sp, fp, FC_RCTL_BA_ACC, FC_TYPE_BLS); | 1101 | fc_seq_send_last(sp, fp, FC_RCTL_BA_ACC, FC_TYPE_BLS); |
1102 | fc_frame_free(rx_fp); | 1102 | fc_frame_free(rx_fp); |