Hi Dan, On Mon, 1 Apr 2019 12:34:00 -0500 Dan Murphy <dmurphy@xxxxxx> wrote: > +static ssize_t sync_store(struct device *dev, > + struct device_attribute *sync_attr, > + const char *buf, size_t size) > +{ > + struct led_classdev_mc_data *data = container_of(sync_attr, > + struct led_classdev_mc_data, > + sync_attr); > + struct led_classdev_mc *mcled_cdev = data->mcled_cdev; > + struct led_classdev *led_cdev = &mcled_cdev->led_cdev; > + const struct led_multicolor_ops *ops = mcled_cdev->ops; > + struct led_classdev_mc_priv *priv; > + unsigned long sync_value; > + ssize_t ret = -EINVAL; > + > + mutex_lock(&led_cdev->led_access); > + > + if (!mcled_cdev->sync_enabled) > + goto unlock; This lock is redundant, you could just put if (mcled_cdev->sync_enabled) return ret; before the lock.