linux/drivers/scsi/lpfc
James Smart cf1a1d3e2d scsi: lpfc: Fix random heartbeat timeouts during heavy IO
NVME targets appear to randomly disconnect from the initiator when
running heavy IO.

The error is due to the host aggregate (across all controllers) io load
was beyond the maximum exchange count for nvme on the adapter. The
driver was properly returning a resource busy status, but the io load
was so great heartbeat commands would be bounced and not have a
successful retry within the fuzz amount for the nvme heartbeat (yes, a
very high io load!). Thus the target was terminating the controller due
to a keep alive failure.

Resolve by reserving a few exchanges (by counters) which can be used
when the adapter is out of normal exchanges and the command is a NVME
heartbeat command. As counters are used, while the reserved command is
outstanding, as soon as any other exchange completes, the counters are
adjusted and the reserved count is replenished. The heartbeat completes
execution in a normal fashion.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2017-12-20 21:11:44 -05:00
..
lpfc_attr.c scsi: lpfc: small sg cnt cleanup 2017-12-04 20:32:55 -05:00
lpfc_attr.h scsi: lpfc: Add Buffer to Buffer credit recovery support 2017-08-24 22:29:43 -04:00
lpfc_bsg.c scsi: lpfc: Fix crash receiving ELS while detaching driver 2017-10-02 22:46:33 -04:00
lpfc_bsg.h
lpfc_compat.h
lpfc_crtn.h scsi: lpfc: Fix driver handling of nvme resources during unload 2017-12-04 20:32:55 -05:00
lpfc_ct.c scsi: lpfc: Linux LPFC driver does not process all RSCNs 2017-12-04 20:32:54 -05:00
lpfc_debugfs.c scsi: lpfc: Adjust default value of lpfc_nvmet_mrq 2017-12-04 20:32:54 -05:00
lpfc_debugfs.h scsi: lpfc: avoid false-positive gcc-8 warning 2017-08-25 18:26:52 -04:00
lpfc_disc.h scsi: lpfc: Correct driver deregistrations with host nvme transport 2017-12-04 20:32:54 -05:00
lpfc_els.c scsi: lpfc: Linux LPFC driver does not process all RSCNs 2017-12-04 20:32:54 -05:00
lpfc_hbadisc.c scsi: lpfc: correct port registrations with nvme_fc 2017-12-04 20:32:54 -05:00
lpfc_hw4.h scsi: lpfc: Expand WQE capability of every NVME hardware queue 2017-12-04 20:32:53 -05:00
lpfc_hw.h scsi: lpfc: Add Buffer to Buffer credit recovery support 2017-08-24 22:29:43 -04:00
lpfc_ids.h
lpfc_init.c scsi: lpfc: Fix random heartbeat timeouts during heavy IO 2017-12-20 21:11:44 -05:00
lpfc_logmsg.h
lpfc_mbox.c scsi: lpfc: Add Buffer to Buffer credit recovery support 2017-08-24 22:29:43 -04:00
lpfc_mem.c
lpfc_nl.h
lpfc_nportdisc.c scsi: lpfc: Fix crash receiving ELS while detaching driver 2017-10-02 22:46:33 -04:00
lpfc_nvme.c scsi: lpfc: Fix random heartbeat timeouts during heavy IO 2017-12-20 21:11:44 -05:00
lpfc_nvme.h scsi: lpfc: Fix random heartbeat timeouts during heavy IO 2017-12-20 21:11:44 -05:00
lpfc_nvmet.c scsi: lpfc: small sg cnt cleanup 2017-12-04 20:32:55 -05:00
lpfc_nvmet.h scsi: lpfc: Adjust default value of lpfc_nvmet_mrq 2017-12-04 20:32:54 -05:00
lpfc_scsi.c scsi: lpfc: Convert timers to use timer_setup() 2017-11-01 11:27:07 -07:00
lpfc_scsi.h
lpfc_sli4.h scsi: lpfc: Handle XRI_ABORTED_CQE in soft IRQ 2017-12-04 20:32:53 -05:00
lpfc_sli.c scsi: lpfc: Fix NVME LS abort_xri 2017-12-04 20:32:54 -05:00
lpfc_sli.h
lpfc_version.h scsi: lpfc: update driver version to 11.4.0.5 2017-12-04 20:32:55 -05:00
lpfc_vport.c scsi: lpfc: Disable NPIV support if NVME is enabled 2017-10-02 22:46:39 -04:00
lpfc_vport.h
lpfc.h scsi: lpfc: Fix random heartbeat timeouts during heavy IO 2017-12-20 21:11:44 -05:00
Makefile