]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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>
Sat, 14 Dec 2024 18:51:10 +0000 (19:51 +0100)
[ Upstream commit e0aa9614ab0fd35b404e4b16ebe879f9fc152591 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/usb/misc/iowarrior.c
drivers/usb/misc/yurex.c

index 2fde8dd0b3e21f3b0222f80dcdee07617af23a81..5606c5a2624a784f275a4c9f91e9fdf749ef87c1 100644 (file)
@@ -912,7 +912,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);
 
@@ -936,9 +935,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 c313cd41f7a5a57a0e104c98071ba8d8302be128..0eed614ac12739add6e53f1928deb4a2d61814ad 100644 (file)
@@ -441,7 +441,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;