The success path and the error path both are first doing
spin_unlock_irqrestore() before returning. Use that in the common path
and return the success/error value.

Signed-off-by: Sudip Mukherjee <su...@vectorindia.org>
---

It is dependent on the patch series sent by Benjamin (Nov 30th).

 drivers/staging/unisys/visornic/visornic_main.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/unisys/visornic/visornic_main.c 
b/drivers/staging/unisys/visornic/visornic_main.c
index 77fd1ef..342c0bf 100644
--- a/drivers/staging/unisys/visornic/visornic_main.c
+++ b/drivers/staging/unisys/visornic/visornic_main.c
@@ -357,15 +357,16 @@ visornic_serverdown(struct visornic_devdata *devdata,
                    visorbus_state_complete_func complete_func)
 {
        unsigned long flags;
+       int retval = 0;
 
        spin_lock_irqsave(&devdata->priv_lock, flags);
        if (!devdata->server_down && !devdata->server_change_state) {
                if (devdata->going_away) {
-                       spin_unlock_irqrestore(&devdata->priv_lock, flags);
                        dev_dbg(&devdata->dev->device,
                                "%s aborting because device removal pending\n",
                                __func__);
-                       return -ENODEV;
+                       retval = -ENODEV;
+                       goto error;
                }
                devdata->server_change_state = true;
                devdata->server_down_complete_func = complete_func;
@@ -374,11 +375,12 @@ visornic_serverdown(struct visornic_devdata *devdata,
        } else if (devdata->server_change_state) {
                dev_dbg(&devdata->dev->device, "%s changing state\n",
                        __func__);
-               spin_unlock_irqrestore(&devdata->priv_lock, flags);
-               return -EINVAL;
+               retval = -EINVAL;
        }
+
+error:
        spin_unlock_irqrestore(&devdata->priv_lock, flags);
-       return 0;
+       return retval;
 }
 
 /**
-- 
1.9.1

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

Reply via email to