[PATCH] usblp: use wait_event_interruptible_timeout() From: Nishanth Aravamudan Use wait_event_timeout() instead of custom wait-queue code. Remove now unused variables. Signed-off-by: Nishanth Aravamudan Signed-off-by: Alexey Dobriyan Index: linux-kj/drivers/usb/class/usblp.c =================================================================== --- linux-kj.orig/drivers/usb/class/usblp.c 2005-10-01 02:49:27.000000000 +0400 +++ linux-kj/drivers/usb/class/usblp.c 2005-10-01 03:00:03.000000000 +0400 @@ -54,6 +54,7 @@ #include #include #include +#include #undef DEBUG #include @@ -627,10 +628,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) { @@ -640,23 +641,10 @@ static ssize_t usblp_write(struct file * return writecount ? writecount : -EAGAIN; } - timeout = USBLP_WRITE_TIMEOUT; - add_wait_queue(&usblp->wait, &wait); - while ( 1==1 ) { - - if (signal_pending(current)) { - remove_wait_queue(&usblp->wait, &wait); - return writecount ? writecount : -EINTR; - } - set_current_state(TASK_INTERRUPTIBLE); - if (timeout && !usblp->wcomplete) { - timeout = schedule_timeout(timeout); - } else { - set_current_state(TASK_RUNNING); - break; - } - } - remove_wait_queue(&usblp->wait, &wait); + ret = wait_event_interruptible_timeout(usblp->wait, + usblp->wcomplete, USBLP_WRITE_TIMEOUT); + if (ret == -ERESTARTSYS) + return writecount ? writecount : -EINTR; } down (&usblp->sem);