scsi: ibmvfc: Fix up duplicate response detection
Commita264cf5e81
("scsi: ibmvfc: Fix command state accounting and stale response detection") introduced a regression in detecting duplicate responses. This was observed in test where a command was sent to the VIOS and completed before ibmvfc_send_event() set the active flag to 1, which resulted in the atomic_dec_if_positive() call in ibmvfc_handle_crq() thinking this was a duplicate response, which resulted in scsi_done() not getting called, so we then hit a SCSI command timeout for this command once the timeout expires. This simply ensures the active flag gets set prior to making the hcall to send the command to the VIOS, in order to close this window. Link: https://lore.kernel.org/r/20211019152129.16558-1-brking@linux.vnet.ibm.com Fixes:a264cf5e81
("scsi: ibmvfc: Fix command state accounting and stale response detection") Cc: stable@vger.kernel.org Acked-by: Tyrel Datwyler <tyreld@linux.ibm.com> Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
4e5483b844
Коммит
e20f80b9b1
|
@ -1696,6 +1696,7 @@ static int ibmvfc_send_event(struct ibmvfc_event *evt,
|
|||
|
||||
spin_lock_irqsave(&evt->queue->l_lock, flags);
|
||||
list_add_tail(&evt->queue_list, &evt->queue->sent);
|
||||
atomic_set(&evt->active, 1);
|
||||
|
||||
mb();
|
||||
|
||||
|
@ -1710,6 +1711,7 @@ static int ibmvfc_send_event(struct ibmvfc_event *evt,
|
|||
be64_to_cpu(crq_as_u64[1]));
|
||||
|
||||
if (rc) {
|
||||
atomic_set(&evt->active, 0);
|
||||
list_del(&evt->queue_list);
|
||||
spin_unlock_irqrestore(&evt->queue->l_lock, flags);
|
||||
del_timer(&evt->timer);
|
||||
|
@ -1737,7 +1739,6 @@ static int ibmvfc_send_event(struct ibmvfc_event *evt,
|
|||
|
||||
evt->done(evt);
|
||||
} else {
|
||||
atomic_set(&evt->active, 1);
|
||||
spin_unlock_irqrestore(&evt->queue->l_lock, flags);
|
||||
ibmvfc_trc_start(evt);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче