inside the 'for' looping: the return value 'rv' may override if not have a check in time. the next checking (outside the 'for' looping): can not find failure which generated during the 'for' looping so need let outside know about the failure. the original related commit is: commit 0de9a7024e7ae62512d080c7e2beb59d82958cd5 Author: Oliver Neukum <oneukum@xxxxxxx> Date: Fri Mar 16 20:28:28 2007 +0100 Signed-off-by: Chen Gang <gang.chen@xxxxxxxxxxx> --- drivers/usb/serial/mos7840.c | 15 ++++++++++----- 1 files changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c index a0d5ea5..91e6c2c 100644 --- a/drivers/usb/serial/mos7840.c +++ b/drivers/usb/serial/mos7840.c @@ -585,7 +585,7 @@ static void mos7840_interrupt_callback(struct urb *urb) __u16 Data; unsigned char *data; __u8 sp[5], st; - int i, rv = 0; + int i; __u16 wval, wreg = 0; int status = urb->status; @@ -651,13 +651,18 @@ static void mos7840_interrupt_callback(struct urb *urb) wreg = MODEM_STATUS_REGISTER; break; } - rv = mos7840_get_reg(mos7840_port, wval, wreg, &Data); + if (mos7840_get_reg(mos7840_port, wval, wreg, + &Data) < 0) + goto exit; } } } - if (!(rv < 0)) - /* the completion handler for the control urb will resubmit */ - return; + + /* + * if all things ok, the completion handler for the control + * urb will resubmit + */ + return; exit: result = usb_submit_urb(urb, GFP_ATOMIC); if (result) { -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html