summary refs log tree commit diff
path: root/drivers/usb/atm
diff options
context:
space:
mode:
authorOliver Neukum <oneukum@suse.de>2007-08-16 16:06:06 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2007-08-22 14:27:58 -0700
commit3b79cc26708bcc476d4e4bf3846032fa3a1eeb85 (patch)
tree31a2c50165b76666ac529d5b2f3e87b8f5af8fef /drivers/usb/atm
parent04cab1329336d4577d6638360c905e360934b425 (diff)
downloadlinux-3b79cc26708bcc476d4e4bf3846032fa3a1eeb85.tar.gz
USB: unkill cxacru atm driver
it seems like you overdid it a bit in your quest to clean up the
use of urb->status. In this driver you read it the first thing, which
means that you are in a race against URB completion you'll
usually lose, returning -EINPROGRESS. This kills the driver.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

Diffstat (limited to 'drivers/usb/atm')
-rw-r--r--drivers/usb/atm/cxacru.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c
index 02c52f8d5dbf..a73e714288e5 100644
--- a/drivers/usb/atm/cxacru.c
+++ b/drivers/usb/atm/cxacru.c
@@ -456,7 +456,6 @@ static int cxacru_start_wait_urb(struct urb *urb, struct completion *done,
 				 int* actual_length)
 {
 	struct timer_list timer;
-	int status = urb->status;
 
 	init_timer(&timer);
 	timer.expires = jiffies + msecs_to_jiffies(CMD_TIMEOUT);
@@ -468,7 +467,7 @@ static int cxacru_start_wait_urb(struct urb *urb, struct completion *done,
 
 	if (actual_length)
 		*actual_length = urb->actual_length;
-	return status;
+	return urb->status; /* must read status after completion */
 }
 
 static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm,