Hello Praveen Madhavan,

The patch 216ce69c7ff5: "csiostor:T5 Firmware fix and cleanup." from
Jan 27, 2015, leads to the following static checker warning:

        drivers/scsi/csiostor/csio_hw.c:2006 csio_hw_use_fwconfig()
        warn: was negative '-ENOENT' intended?

        drivers/scsi/csiostor/csio_hw.c:2433 csio_hw_configure()
        warn: 'rv' is never (-2)

drivers/scsi/csiostor/csio_hw.c
  1994          if (csio_mb_issue(hw, mbp)) {
  1995                  rv = -EINVAL;
  1996                  goto bye;
  1997          }
  1998  
  1999          rv = csio_mb_fw_retval(mbp);
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
The first warning is a false positive because for some reason Smatch
thinks that csio_mb_fw_retval() always returns zero.  But actually it
returns enum fw_retval.

  2000           /* If the CAPS_CONFIG failed with an ENOENT (for a Firmware
                                                      ^^^^^^
So this should be FW_ENOENT.

  2001            * Configuration File in FLASH), our last gasp effort is to 
use the
  2002            * Firmware Configuration File which is embedded in the
  2003            * firmware.  A very few early versions of the firmware didn't
  2004            * have one embedded but we can ignore those.
  2005            */
  2006          if (rv == ENOENT) {
                    ^^^^^^^^^^^^
And this as well.  It doesn't affect runtime because ENOENT AND FW_ENOENT
are both 2.

  2007                  CSIO_INIT_MBP(mbp, caps_cmd, CSIO_MB_DEFAULT_TMO, hw, 
NULL, 1);
  2008                  caps_cmd->op_to_write = 
htonl(FW_CMD_OP_V(FW_CAPS_CONFIG_CMD) |
  2009                                                FW_CMD_REQUEST_F |
  2010                                                FW_CMD_READ_F);
  2011                  caps_cmd->cfvalid_to_len16 = htonl(FW_LEN16(*caps_cmd));
  2012  
  2013                  if (csio_mb_issue(hw, mbp)) {
  2014                          rv = -EINVAL;
  2015                          goto bye;
  2016                  }
  2017  
  2018                  rv = csio_mb_fw_retval(mbp);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  2019                  config_name = "Firmware Default";
  2020          }
  2021          if (rv != FW_SUCCESS)
                    ^^^^^^^^^^^^^^^^
But then this function seems to return a mix of negative kernel error
codes and positive FW_ error codes.  There is a static checker warning
in the caller because we're checking for -ENOENT and Smatch thinks that
isn't possible.  Perhaps we should be checking for positive FW_ENOENT?

It's not super harmful because it only affects which warning is printed.

  2022                  goto bye;
  2023  

regards,
dan carpenter

Reply via email to