Skip to contentSkip to conversation

usb/usblp: use wait_event_interruptible_timeout()

PATCH New Nishanth Aravamudan 1 participant 1 message Jan 21, 2005

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 38/39 usb/usblp: use wait_event_interruptible_timeout()

Hi,

Please consider applying.

Description: Use wait_event_timeout() instead of custom wait-queue code. Remove now unused variables.

drivers/usb/class/usblp.c +7 -17
@@ -54,6 +54,7 @@
 #include <linux/init.h>
 #include <linux/slab.h>
 #include <linux/lp.h>
+#include <linux/wait.h>
 #undef DEBUG
 #include <linux/usb.h>
 
@@ -622,10 +623,10 @@ done:
 
 static ssize_t usblp_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
 {
-	DECLARE_WAITQUEUE(wait, current);
 	struct usblp *usblp = file->private_data;
-	int timeout, err = 0, transfer_length = 0;
+	int err = 0, transfer_length = 0;
 	size_t writecount = 0;
+	long ret;
 
 	while (writecount < count) {
 		if (!usblp->wcomplete) {
@@ -635,21 +636,10 @@ static ssize_t usblp_write(struct file *
 				return writecount ? writecount : -EAGAIN;
 			}
 
-			timeout = USBLP_WRITE_TIMEOUT;
-			add_wait_queue(&usblp->wait, &wait);
-			while (timeout) {
-				if (signal_pending(current)) {
-					remove_wait_queue(&usblp->wait, &wait);
-					return writecount ? writecount : -EINTR;
-				}
-				set_current_state(TASK_INTERRUPTIBLE);
-				if (usblp->wcomplete) {
-					set_current_state(TASK_RUNNING);
-					break;
-				}
-				timeout = schedule_timeout(timeout);
-			}
-			remove_wait_queue(&usblp->wait, &wait);
+			ret = wait_event_interruptible_timeout(usblp->wait,
+							usblp->complete, USBLP_WRITE_TIMEOUT);
+			if (ret == -ERESTARTSYS)
+				return writecount ? writecount : -EINTR;
 		}
 
 		down (&usblp->sem);

_______________________________________________
Kernel-janitors mailing list
[email protected]
http://lists.osdl.org/mailman/listinfo/kernel-janitors