usb: yurex: make waiting on yurex_write interruptible
authorOliver Neukum <oneukum@suse.com>
Tue, 24 Sep 2024 08:43:45 +0000 (10:43 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 4 Oct 2024 13:16:17 +0000 (15:16 +0200)
The IO yurex_write() needs to wait for in order to have a device
ready for writing again can take a long time time.
Consequently the sleep is done in an interruptible state.
Therefore others waiting for yurex_write() itself to finish should
use mutex_lock_interruptible.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
Fixes: 6bc235a2e24a5 ("USB: add driver for Meywa-Denki & Kayac YUREX")
Rule: add
Link: https://lore.kernel.org/stable/20240924084415.300557-1-oneukum%40suse.com
Link: https://lore.kernel.org/r/20240924084415.300557-1-oneukum@suse.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/misc/iowarrior.c
drivers/usb/misc/yurex.c

index a513766b4985d097c2718451a1bea453e88339e9..365c100693458380c1608a416842d5ea72a5cac6 100644 (file)
@@ -911,7 +911,6 @@ error:
 static void iowarrior_disconnect(struct usb_interface *interface)
 {
        struct iowarrior *dev = usb_get_intfdata(interface);
-       int minor = dev->minor;
 
        usb_deregister_dev(interface, &iowarrior_class);
 
@@ -935,9 +934,6 @@ static void iowarrior_disconnect(struct usb_interface *interface)
                mutex_unlock(&dev->mutex);
                iowarrior_delete(dev);
        }
-
-       dev_info(&interface->dev, "I/O-Warror #%d now disconnected\n",
-                minor - IOWARRIOR_MINOR_BASE);
 }
 
 /* usb specific object needed to register this driver with the usb subsystem */
index 4a9859e03f6b4cf3eaec0b64a3d90ede4086af31..316634f782c6def18acf1e4af3bb7a5affe26b04 100644 (file)
@@ -444,7 +444,10 @@ static ssize_t yurex_write(struct file *file, const char __user *user_buffer,
        if (count == 0)
                goto error;
 
-       mutex_lock(&dev->io_mutex);
+       retval = mutex_lock_interruptible(&dev->io_mutex);
+       if (retval < 0)
+               return -EINTR;
+
        if (dev->disconnected) {                /* already disconnected */
                mutex_unlock(&dev->io_mutex);
                retval = -ENODEV;