min, max, val);
        }
 
-       /* usbnet use these values for sizing rx queues */
-       dev->rx_urb_size = val;
-
        /* inform device about NTB input size changes */
        if (val != ctx->rx_max) {
                __le32 dwNtbInMaxSize = cpu_to_le32(val);
 
                dev_info(&dev->intf->dev, "setting rx_max = %u\n", val);
 
-               /* need to unlink rx urbs before increasing buffer size */
-               if (netif_running(dev->net) && dev->rx_urb_size > ctx->rx_max)
-                       usbnet_unlink_rx_urbs(dev);
-
                /* tell device to use new size */
                if (usbnet_write_cmd(dev, USB_CDC_SET_NTB_INPUT_SIZE,
                                     USB_TYPE_CLASS | USB_DIR_OUT
                        ctx->rx_max = val;
        }
 
+       /* usbnet use these values for sizing rx queues */
+       if (dev->rx_urb_size != ctx->rx_max) {
+               dev->rx_urb_size = ctx->rx_max;
+               if (netif_running(dev->net))
+                       usbnet_unlink_rx_urbs(dev);
+       }
+
        /* clamp new_tx to sane values */
        min = ctx->max_datagram_size + ctx->max_ndp_size + sizeof(struct usb_cdc_ncm_nth16);
        max = min_t(u32, CDC_NCM_NTB_MAX_SIZE_TX, le32_to_cpu(ctx->ncm_parm.dwNtbOutMaxSize));