Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usbip: clean up code in vhci_device_unlink_cleanup

The cleanup code for unlink_tx and unlink_rx lists is almost the same.
So, extract it into a new function and call it for both unlink_rx and
unlink_tx. Also, remove unnecessary log messages.

Signed-off-by: Anirudh Rayabharam <mail@anirudhrb.com>
Link: https://lore.kernel.org/r/20210820190122.16379-3-mail@anirudhrb.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Anirudh Rayabharam and committed by
Greg Kroah-Hartman
5289253b 258c81b3

+12 -40
+12 -40
drivers/usb/usbip/vhci_hcd.c
··· 945 945 return 0; 946 946 } 947 947 948 - static void vhci_device_unlink_cleanup(struct vhci_device *vdev) 948 + static void vhci_cleanup_unlink_list(struct vhci_device *vdev, 949 + struct list_head *unlink_list) 949 950 { 950 951 struct vhci_hcd *vhci_hcd = vdev_to_vhci_hcd(vdev); 951 952 struct usb_hcd *hcd = vhci_hcd_to_hcd(vhci_hcd); ··· 957 956 spin_lock_irqsave(&vhci->lock, flags); 958 957 spin_lock(&vdev->priv_lock); 959 958 960 - list_for_each_entry_safe(unlink, tmp, &vdev->unlink_tx, list) { 959 + list_for_each_entry_safe(unlink, tmp, unlink_list, list) { 961 960 struct urb *urb; 962 - 963 - /* give back urb of unsent unlink request */ 964 - pr_info("unlink cleanup tx %lu\n", unlink->unlink_seqnum); 965 961 966 962 urb = pickup_urb_and_free_priv(vdev, unlink->unlink_seqnum); 967 963 if (!urb) { 968 - list_del(&unlink->list); 969 - kfree(unlink); 970 - continue; 971 - } 972 - 973 - urb->status = -ENODEV; 974 - 975 - usb_hcd_unlink_urb_from_ep(hcd, urb); 976 - 977 - list_del(&unlink->list); 978 - 979 - spin_unlock(&vdev->priv_lock); 980 - spin_unlock_irqrestore(&vhci->lock, flags); 981 - 982 - usb_hcd_giveback_urb(hcd, urb, urb->status); 983 - 984 - spin_lock_irqsave(&vhci->lock, flags); 985 - spin_lock(&vdev->priv_lock); 986 - 987 - kfree(unlink); 988 - } 989 - 990 - while (!list_empty(&vdev->unlink_rx)) { 991 - struct urb *urb; 992 - 993 - unlink = list_first_entry(&vdev->unlink_rx, struct vhci_unlink, 994 - list); 995 - 996 - /* give back URB of unanswered unlink request */ 997 - pr_info("unlink cleanup rx %lu\n", unlink->unlink_seqnum); 998 - 999 - urb = pickup_urb_and_free_priv(vdev, unlink->unlink_seqnum); 1000 - if (!urb) { 1001 - pr_info("the urb (seqnum %lu) was already given back\n", 1002 - unlink->unlink_seqnum); 1003 964 list_del(&unlink->list); 1004 965 kfree(unlink); 1005 966 continue; ··· 986 1023 987 1024 spin_unlock(&vdev->priv_lock); 988 1025 spin_unlock_irqrestore(&vhci->lock, flags); 1026 + } 1027 + 1028 + static void vhci_device_unlink_cleanup(struct vhci_device *vdev) 1029 + { 1030 + /* give back URB of unsent unlink request */ 1031 + vhci_cleanup_unlink_list(vdev, &vdev->unlink_tx); 1032 + 1033 + /* give back URB of unanswered unlink request */ 1034 + vhci_cleanup_unlink_list(vdev, &vdev->unlink_rx); 989 1035 } 990 1036 991 1037 /*