diff options
Diffstat (limited to 'drivers/usb/usbip/vudc_sysfs.c')
| -rw-r--r-- | drivers/usb/usbip/vudc_sysfs.c | 5 | 
1 files changed, 5 insertions, 0 deletions
| diff --git a/drivers/usb/usbip/vudc_sysfs.c b/drivers/usb/usbip/vudc_sysfs.c index 7383a543c6d1..f7633ee655a1 100644 --- a/drivers/usb/usbip/vudc_sysfs.c +++ b/drivers/usb/usbip/vudc_sysfs.c @@ -112,6 +112,7 @@ static ssize_t usbip_sockfd_store(struct device *dev,  		dev_err(dev, "no device");  		return -ENODEV;  	} +	mutex_lock(&udc->ud.sysfs_lock);  	spin_lock_irqsave(&udc->lock, flags);  	/* Don't export what we don't have */  	if (!udc->driver || !udc->pullup) { @@ -187,6 +188,8 @@ static ssize_t usbip_sockfd_store(struct device *dev,  		wake_up_process(udc->ud.tcp_rx);  		wake_up_process(udc->ud.tcp_tx); + +		mutex_unlock(&udc->ud.sysfs_lock);  		return count;  	} else { @@ -207,6 +210,7 @@ static ssize_t usbip_sockfd_store(struct device *dev,  	}  	spin_unlock_irqrestore(&udc->lock, flags); +	mutex_unlock(&udc->ud.sysfs_lock);  	return count; @@ -216,6 +220,7 @@ unlock_ud:  	spin_unlock_irq(&udc->ud.lock);  unlock:  	spin_unlock_irqrestore(&udc->lock, flags); +	mutex_unlock(&udc->ud.sysfs_lock);  	return ret;  } |