On Tue, Sep 26, 2023 at 02:27:27PM -0700, Douglas Anderson wrote: > + > +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