Skip to contentSkip to conversation

ses: Fix problems with simple enclosures

bug report Dan Carpenter 1 participant 1 message Jan 12, 2017 SCSI

lore
Share & tools
lore
#0 lore raw

Hello James Bottomley,

The patch 3417c1b5cb1f: "ses: Fix problems with simple enclosures" from Dec 8, 2015, leads to the following static checker warning:

	drivers/scsi/ses.c:103 ses_recv_diag()
	info: return a literal instead of 'ret'

drivers/scsi/ses.c

    86  static int ses_recv_diag(struct scsi_device *sdev, int page_code,
    87                           void *buf, int bufflen)
    88  {
    89          int ret;
    90          unsigned char cmd[] = {
    91                  RECEIVE_DIAGNOSTIC,
    92                  1,              /* Set PCV bit */
    93                  page_code,
    94                  bufflen >> 8,
    95                  bufflen & 0xff,
    96                  0
    97          };
    98          unsigned char recv_page_code;
    99  

100 ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen,
101 NULL, SES_TIMEOUT, SES_RETRIES, NULL);
102 if (unlikely(!ret))
103 return ret;

This code works, but why is it unlikely() that scsi_execute_req() will succeed?

104
105 recv_page_code = ((unsigned char *)buf)[0];
106
107 if (likely(recv_page_code == page_code))
108 return ret;
109
110 /* successful diagnostic but wrong page code. This happens to some
111 * USB devices, just print a message and pretend there was an error */
112
113 sdev_printk(KERN_ERR, sdev,
114 "Wrong diagnostic page; asked for %d got %u\n",
115 page_code, recv_page_code);
116
117 return -EINVAL;

We sort of mixing a bunch of different types of error codes here aren't we? Shouldn't this be "return DRIVER_ERROR << 24;" like how scsi_execute_req() does it? I don't think the callers care.

118 }

regards,
dan carpenter