On Wed, Jan 13, 2021 at 07:38:28PM -0800, Thinh Nguyen wrote: ... > @@ -1543,10 +1546,12 @@ static ssize_t soft_connect_store(struct device *dev, > usb_gadget_udc_stop(udc); > } else { > dev_err(dev, "unsupported command '%s'\n", buf); > - return -EINVAL; > + ret = -EINVAL; > } > > - return n; > +out: > + mutex_unlock(&udc_lock); > + return ret; > } This is *very* tricky: the return value will be easily broken if someone adds any code later after the else body and before the "out" label.