patch: s2255drv: urb completion routine fixes
From: Dean Anderson <[email protected]>
Error count in read pipe completion corrected.
URB not resubmitted if shutting down.
URB not freed in completion routine if new urb_submit_fails. (URB is freed on shutdown).
Signed-off-by Dean Anderson <[email protected]>
linux/drivers/media/video/s2255drv.c renamed from linux/drivers/media/video/s2255drv.c.orig +10 -5
@@ -2240,8 +2240,10 @@ static void read_pipe_completion(structreturn ; } status = purb->status; -if (status !=0 ) { -dprintk (2 ,"read_pipe_completion: err\n" ); +/* if shutting down, do not resubmit, exit immediately */ +if (status == -ESHUTDOWN ) { +dprintk (2 ,"read_pipe_completion: err shutdown\n" ); + pipe_info->err_count++;return ; }
@@ -2250,9 +2252,13 @@ static void read_pipe_completion(structreturn ; } -s2255_read_video_callback (dev, pipe_info); +if (status ==0 ) +s2255_read_video_callback (dev, pipe_info); +else { + pipe_info->err_count++; +dprintk (1 ,"s2255drv: failed URB %d\n" , status); + } - pipe_info->err_count =0 ; pipe =usb_rcvbulkpipe (dev->udev, dev->read_endpoint);/* reuse urb */ usb_fill_bulk_urb(pipe_info->stream_urb, dev->udev,
@@ -2264,7 +2270,6 @@ static void read_pipe_completion(structif (pipe_info->state !=0 ) {if (usb_submit_urb (pipe_info->stream_urb,GFP_KERNEL )) {dev_err (&dev->udev->dev,"error submitting urb\n" ); -usb_free_urb (pipe_info->stream_urb); } }else {dprintk (2 ,"read pipe complete state 0\n" );