On Tue, Sep 26, 2023 at 02:27:27PM -0700, Douglas Anderson wrote:
quoted hunk ↗ jump to hunk
+
+static
+int r8152_control_msg(struct usb_device *udev, unsigned int pipe, __u8 request,
+ __u8 requesttype, __u16 value, __u16 index, void *data,
+ __u16 size, const char *msg_tag)
+{
+ int i;
+ int ret;
+
+ for (i = 0; i < REGISTER_ACCESS_TRIES; i++) {
+ ret = usb_control_msg(udev, pipe, request, requesttype,
+ value, index, data, size,
+ USB_CTRL_GET_TIMEOUT);
+
+ /* No need to retry or spam errors if the USB device got
+ * unplugged; just return immediately.
+ */
+ if (udev->state == USB_STATE_NOTATTACHED)
+ return ret;
Rather than testing udev->state, it would be better to check whether
ret == -ENODEV. udev->state is meant primarily for use by the USB core
and it's subject to races.
Alan Stern