Hello James Smart,
This is a semi-automatic email about new static checker warnings.
The patch add9d6be3d65: "scsi: lpfc: Correct driver deregistrations
with host nvme transport" from Nov 20, 2017, leads to the following
Smatch complaint:
drivers/scsi/lpfc/lpfc_nvme.c:969 lpfc_nvme_io_cmd_wqe_cmpl()
error: we previously assumed 'ndlp' could be null (see line 938)
drivers/scsi/lpfc/lpfc_nvme.c
937
938 if (ndlp && NLP_CHK_NODE_ACT(ndlp))
^^^^
Existing code assumes ndlp can be NULL.
939 atomic_dec(&ndlp->cmd_pending);
940
941 /* Update stats and complete the IO. There is
942 * no need for dma unprep because the nvme_transport
943 * owns the dma address.
944 */
945 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
946 if (lpfc_ncmd->ts_cmd_start) {
947 lpfc_ncmd->ts_isr_cmpl = pwqeIn->isr_timestamp;
948 lpfc_ncmd->ts_data_nvme = ktime_get_ns();
949 phba->ktime_last_cmd = lpfc_ncmd->ts_data_nvme;
950 lpfc_nvme_ktime(phba, lpfc_ncmd);
951 }
952 if (phba->cpucheck_on & LPFC_CHECK_NVME_IO) {
953 if (lpfc_ncmd->cpu != smp_processor_id())
954 lpfc_printf_vlog(vport, KERN_ERR,
LOG_NVME_IOERR,
955 "6701 CPU Check cmpl: "
956 "cpu %d expect %d\n",
957 smp_processor_id(),
lpfc_ncmd->cpu);
958 if (lpfc_ncmd->cpu < LPFC_CHECK_CPU_CNT)
959 phba->cpucheck_cmpl_io[lpfc_ncmd->cpu]++;
960 }
961 #endif
962 freqpriv = nCmd->private;
963 freqpriv->nvme_buf = NULL;
964
965 /* NVME targets need completion held off until the abort
exchange
966 * completes unless the NVME Rport is getting unregistered.
967 */
968 if (!(lpfc_ncmd->flags & LPFC_SBUF_XBUSY) ||
969 ndlp->upcall_flags & NLP_WAIT_FOR_UNREG) {
^^^^^^^^^^^^^^^^^
The patch adds an unchecked dereference.
970 /* Clear the XBUSY flag to prevent double completions.
971 * The nvme rport is getting unregistered and there is
regards,
dan carpenter