Thanks.
How did you find the problem?
Why does it make sense to cast it to u32?
After running with usbip enough time, I happened to see logs like this:
[ 293.863125] vhci_hcd vhci_hcd.0: Device attached
[ 294.081110] usb 1-1: new high-speed USB device number 2 using vhci_hcd
[ 294.193163] usb 1-1: SetAddress Request (2) to port 0
[ 294.204334] vhci_hcd: cannot find a urb of seqnum 2147483648 max seqnum -2147483648
[ 294.204850] vhci_hcd: stop threads
[ 294.204851] vhci_hcd: release socket
[ 294.204853] vhci_hcd: disconnect device
Then I notice that on 64bit platform, when
atomic_inc_return(&vhci_hcd->seqnum) returns (2147483647 + 1, or
0x80000000),
priv->seqnum (which is unsigned long, i.e. u64 on 64bit) will be
extends to 0xffffffff80000000
So we can fix the issue by cast it to u32.