Skip to content

Commit f5c0927

Browse files
juhosggroeck
authored andcommitted
hwmon: (gpio-fan) Fix set_rpm() return value
The set_rpm function is used as a 'store' callback of a device attribute, and as such it should return with the number of bytes consumed. However since commit 0d01110 ("hwmon: (gpio-fan) Add regulator support"), the function returns with zero on success. Due to this, the function gets called again and again whenever the user tries to change the FAN speed by writing the desired RPM value into the 'fan1_target' sysfs attribute. The broken behaviour can be reproduced easily. For example, the following command never returns unless it gets terminated: $ echo 500 > /sys/class/hwmon/hwmon1/fan1_target ^C $ Change the code to return with the same value as the 'count' parameter on success to indicate that all bytes from the input buffer are consumed. The function behaved the same way prior to the offending change. Cc: [email protected] Fixes: 0d01110 ("hwmon: (gpio-fan) Add regulator support") Signed-off-by: Gabor Juhos <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Guenter Roeck <[email protected]>
1 parent 615901b commit f5c0927

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

drivers/hwmon/gpio-fan.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ static ssize_t set_rpm(struct device *dev, struct device_attribute *attr,
291291
{
292292
struct gpio_fan_data *fan_data = dev_get_drvdata(dev);
293293
unsigned long rpm;
294-
int ret = count;
294+
int ret;
295295

296296
if (kstrtoul(buf, 10, &rpm))
297297
return -EINVAL;
@@ -308,7 +308,7 @@ static ssize_t set_rpm(struct device *dev, struct device_attribute *attr,
308308
exit_unlock:
309309
mutex_unlock(&fan_data->lock);
310310

311-
return ret;
311+
return ret ? ret : count;
312312
}
313313

314314
static DEVICE_ATTR_RW(pwm1);

0 commit comments

Comments
 (0)