USB: fix error handling in trancevibrator
authorOliver Neukum <oliver@neukum.org>
Wed, 30 Jan 2008 15:06:03 +0000 (16:06 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 21 Feb 2008 23:38:51 +0000 (15:38 -0800)
trancevibrator should not pretend success if it returns an error.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/misc/trancevibrator.c

index 67e2fc20eeeb29d8381dddea4588318630725273..03368edf3f22410b016041e6217d00ed6d5508aa 100644 (file)
@@ -59,13 +59,14 @@ static ssize_t set_speed(struct device *dev, struct device_attribute *attr,
 {
        struct usb_interface *intf = to_usb_interface(dev);
        struct trancevibrator *tv = usb_get_intfdata(intf);
-       int temp, retval;
+       int temp, retval, old;
 
        temp = simple_strtoul(buf, NULL, 10);
        if (temp > 255)
                temp = 255;
        else if (temp < 0)
                temp = 0;
+       old = tv->speed;
        tv->speed = temp;
 
        dev_dbg(&tv->udev->dev, "speed = %d\n", tv->speed);
@@ -77,6 +78,7 @@ static ssize_t set_speed(struct device *dev, struct device_attribute *attr,
                                 tv->speed, /* speed value */
                                 0, NULL, 0, USB_CTRL_GET_TIMEOUT);
        if (retval) {
+               tv->speed = old;
                dev_dbg(&tv->udev->dev, "retval = %d\n", retval);
                return retval;
        }