diff options
author | Shuah Khan <shuahkh@osg.samsung.com> | 2018-01-26 13:56:50 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-02-15 12:43:57 -0500 |
commit | 009f41aed4b3e11e6dc1e3c07377a10c20f1a5ed (patch) | |
tree | d99166ff52d5df49fde2d0dec55f32a0ec393e27 | |
parent | b2685bdacdaab065c172b97b55ab46c6be77a037 (diff) |
usbip: keep usbip_device sockfd state in sync with tcp_socket
Keep usbip_device sockfd state in sync with tcp_socket. When tcp_socket
is reset to null, reset sockfd to -1 to keep it in sync.
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/usb/usbip/stub_dev.c | 3 | ||||
-rw-r--r-- | drivers/usb/usbip/vhci_hcd.c | 2 |
2 files changed, 5 insertions, 0 deletions
diff --git a/drivers/usb/usbip/stub_dev.c b/drivers/usb/usbip/stub_dev.c index 49e552472c3f..dd8ef36ab10e 100644 --- a/drivers/usb/usbip/stub_dev.c +++ b/drivers/usb/usbip/stub_dev.c | |||
@@ -73,6 +73,7 @@ static ssize_t usbip_sockfd_store(struct device *dev, struct device_attribute *a | |||
73 | goto err; | 73 | goto err; |
74 | 74 | ||
75 | sdev->ud.tcp_socket = socket; | 75 | sdev->ud.tcp_socket = socket; |
76 | sdev->ud.sockfd = sockfd; | ||
76 | 77 | ||
77 | spin_unlock_irq(&sdev->ud.lock); | 78 | spin_unlock_irq(&sdev->ud.lock); |
78 | 79 | ||
@@ -172,6 +173,7 @@ static void stub_shutdown_connection(struct usbip_device *ud) | |||
172 | if (ud->tcp_socket) { | 173 | if (ud->tcp_socket) { |
173 | sockfd_put(ud->tcp_socket); | 174 | sockfd_put(ud->tcp_socket); |
174 | ud->tcp_socket = NULL; | 175 | ud->tcp_socket = NULL; |
176 | ud->sockfd = -1; | ||
175 | } | 177 | } |
176 | 178 | ||
177 | /* 3. free used data */ | 179 | /* 3. free used data */ |
@@ -266,6 +268,7 @@ static struct stub_device *stub_device_alloc(struct usb_device *udev) | |||
266 | sdev->ud.status = SDEV_ST_AVAILABLE; | 268 | sdev->ud.status = SDEV_ST_AVAILABLE; |
267 | spin_lock_init(&sdev->ud.lock); | 269 | spin_lock_init(&sdev->ud.lock); |
268 | sdev->ud.tcp_socket = NULL; | 270 | sdev->ud.tcp_socket = NULL; |
271 | sdev->ud.sockfd = -1; | ||
269 | 272 | ||
270 | INIT_LIST_HEAD(&sdev->priv_init); | 273 | INIT_LIST_HEAD(&sdev->priv_init); |
271 | INIT_LIST_HEAD(&sdev->priv_tx); | 274 | INIT_LIST_HEAD(&sdev->priv_tx); |
diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c index c3e1008aa491..20e3d4609583 100644 --- a/drivers/usb/usbip/vhci_hcd.c +++ b/drivers/usb/usbip/vhci_hcd.c | |||
@@ -984,6 +984,7 @@ static void vhci_shutdown_connection(struct usbip_device *ud) | |||
984 | if (vdev->ud.tcp_socket) { | 984 | if (vdev->ud.tcp_socket) { |
985 | sockfd_put(vdev->ud.tcp_socket); | 985 | sockfd_put(vdev->ud.tcp_socket); |
986 | vdev->ud.tcp_socket = NULL; | 986 | vdev->ud.tcp_socket = NULL; |
987 | vdev->ud.sockfd = -1; | ||
987 | } | 988 | } |
988 | pr_info("release socket\n"); | 989 | pr_info("release socket\n"); |
989 | 990 | ||
@@ -1030,6 +1031,7 @@ static void vhci_device_reset(struct usbip_device *ud) | |||
1030 | if (ud->tcp_socket) { | 1031 | if (ud->tcp_socket) { |
1031 | sockfd_put(ud->tcp_socket); | 1032 | sockfd_put(ud->tcp_socket); |
1032 | ud->tcp_socket = NULL; | 1033 | ud->tcp_socket = NULL; |
1034 | ud->sockfd = -1; | ||
1033 | } | 1035 | } |
1034 | ud->status = VDEV_ST_NULL; | 1036 | ud->status = VDEV_ST_NULL; |
1035 | 1037 | ||