Move urb killing code into separate function and use it
instead of copying that code pattern over.

Signed-off-by: Ladislav Michl <la...@linux-mips.org>
---
 drivers/usb/class/cdc-acm.c | 43 ++++++++++++++++---------------------------
 1 file changed, 16 insertions(+), 27 deletions(-)

diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index 8e2d82c..4a87fd8 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -158,6 +158,17 @@ static inline int acm_set_control(struct acm *acm, int 
control)
 #define acm_send_break(acm, ms) \
        acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
 
+static void acm_kill_urbs(struct acm *acm)
+{
+       int i;
+
+       usb_kill_urb(acm->ctrlurb);
+       for (i = 0; i < ACM_NW; i++)
+               usb_kill_urb(acm->wb[i].urb);
+       for (i = 0; i < acm->rx_buflimit; i++)
+               usb_kill_urb(acm->read_urbs[i]);
+}
+
 /*
  * Write buffer management.
  * All of these assume proper locks taken by the caller.
@@ -607,7 +618,6 @@ static void acm_port_shutdown(struct tty_port *port)
        struct acm *acm = container_of(port, struct acm, port);
        struct urb *urb;
        struct acm_wb *wb;
-       int i;
 
        /*
         * Need to grab write_lock to prevent race with resume, but no need to
@@ -629,11 +639,7 @@ static void acm_port_shutdown(struct tty_port *port)
                usb_autopm_put_interface_async(acm->control);
        }
 
-       usb_kill_urb(acm->ctrlurb);
-       for (i = 0; i < ACM_NW; i++)
-               usb_kill_urb(acm->wb[i].urb);
-       for (i = 0; i < acm->rx_buflimit; i++)
-               usb_kill_urb(acm->read_urbs[i]);
+       acm_kill_urbs(acm);
 }
 
 static void acm_tty_cleanup(struct tty_struct *tty)
@@ -1517,24 +1523,10 @@ static int acm_probe(struct usb_interface *intf,
        return rv;
 }
 
-static void stop_data_traffic(struct acm *acm)
-{
-       int i;
-
-       usb_kill_urb(acm->ctrlurb);
-       for (i = 0; i < ACM_NW; i++)
-               usb_kill_urb(acm->wb[i].urb);
-       for (i = 0; i < acm->rx_buflimit; i++)
-               usb_kill_urb(acm->read_urbs[i]);
-
-       cancel_work_sync(&acm->work);
-}
-
 static void acm_disconnect(struct usb_interface *intf)
 {
        struct acm *acm = usb_get_intfdata(intf);
        struct tty_struct *tty;
-       int i;
 
        /* sibling interface is already cleaning up */
        if (!acm)
@@ -1560,15 +1552,11 @@ static void acm_disconnect(struct usb_interface *intf)
                tty_kref_put(tty);
        }
 
-       stop_data_traffic(acm);
+       acm_kill_urbs(acm);
+       cancel_work_sync(&acm->work);
 
        tty_unregister_device(acm_tty_driver, acm->minor);
 
-       usb_free_urb(acm->ctrlurb);
-       for (i = 0; i < ACM_NW; i++)
-               usb_free_urb(acm->wb[i].urb);
-       for (i = 0; i < acm->rx_buflimit; i++)
-               usb_free_urb(acm->read_urbs[i]);
        acm_write_buffers_free(acm);
        usb_free_coherent(acm->dev, acm->ctrlsize, acm->ctrl_buffer, 
acm->ctrl_dma);
        acm_read_buffers_free(acm);
@@ -1599,7 +1587,8 @@ static int acm_suspend(struct usb_interface *intf, 
pm_message_t message)
        if (cnt)
                return 0;
 
-       stop_data_traffic(acm);
+       acm_kill_urbs(acm);
+       cancel_work_sync(&acm->work);
 
        return 0;
 }
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to