Re: staging: unisys: fix else statement in visornic_main.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2016-02-16 at 10:31 +0300, Dan Carpenter wrote:
> [ checkpatch.pl told someone to introduce a bug and they did...  ]

Yeah, it happens.

People should not take a message like "generally" as
an absolute.

"else is not generally useful after a break or return"

checkpatch isn't a flow control analysis tool.
coccinelle might be able to do this better.

There isn't a coccinelle rule for this as far as I know.

> Hello Erik Arfvidson,
> 
> The patch 05f1b17ec7aa: "staging: unisys: fix else statement in
> visornic_main.c" from Feb 8, 2016, leads to the following static
> checker warning:
> 
> 	drivers/staging/unisys/visornic/visornic_main.c:381 visornic_serverdown()
> 	error: double unlock 'spin_lock:&devdata->priv_lock'
> 
> drivers/staging/unisys/visornic/visornic_main.c
>    356  static int
>    357  visornic_serverdown(struct visornic_devdata *devdata,
>    358                      visorbus_state_complete_func complete_func)
>    359  {
>    360          unsigned long flags;
>    361  
>    362          spin_lock_irqsave(&devdata->priv_lock, flags);
>    363          if (!devdata->server_down && !devdata->server_change_state) {
>    364                  if (devdata->going_away) {
>    365                          spin_unlock_irqrestore(&devdata->priv_lock, flags);
>    366                          dev_dbg(&devdata->dev->device,
>    367                                  "%s aborting because device removal pending\n",
>    368                                  __func__);
>    369                          return -ENODEV;
>    370                  }
>    371                  devdata->server_change_state = true;
>    372                  devdata->server_down_complete_func = complete_func;
>    373                  spin_unlock_irqrestore(&devdata->priv_lock, flags);
>                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>    374                  visornic_serverdown_complete(devdata);
>    375          } else if (devdata->server_change_state) {
>    376                  dev_dbg(&devdata->dev->device, "%s changing state\n",
>    377                          __func__);
>    378                  spin_unlock_irqrestore(&devdata->priv_lock, flags);
>    379                  return -EINVAL;
>    380          }
>    381          spin_unlock_irqrestore(&devdata->priv_lock, flags);
>                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>    382          return 0;
>    383  }
> 
> regards,
> dan carpenter

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux