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

Reply via email to