Repeating the comment in the upstream bug I just made:
I added debugging to dev_hold and dev_put as Eric suggested and used the reproducer attached to this bug. What I saw was creation and destruction would be balanced. However on the connect call, there were another two dev_hold() calls that seem to be exactly those references not been returned.
Unfortunately the stack traces miss the details about going into ip_route_connect, but with more printks I know that ip_route_output_flow() is the one failing with -EINVAL.
Comparing functions between 3.5 and current linux-HEAD I was not very successful in spotting the important difference.
Repeating the comment in the upstream bug I just made:
I added debugging to dev_hold and dev_put as Eric suggested and used the reproducer attached to this bug. What I saw was creation and destruction would be balanced. However on the connect call, there were another two dev_hold() calls that seem to be exactly those references not been returned.
system_ call_fastpath+ 0x1a/0x1f 0xeb/0x110 stream_ connect+ 0x11c/0x310 v4_connect+ 0x13c/0x510
ip_route_ connect+ ???/???
__ip_ route_output_ key+0x39a/ 0xb10
ip_ route_output_ slow
__mkroute_ output
rt_dst_ alloc+0x3e/ 0x40
dst_ alloc+0xc5/ 0x1c0
+ 1 = 8
rt_ set_nexthop. isra.45+ 0x131/0x2d0 ?
rt_ intern_ hash+0x133/ 0x670
rt_bind_ neighbour+ 0x1d/0x40
ipv4_ neigh_lookup+ 0xe7/0x120
neigh_ create+ 0x1bd/0x5d0
+9
sys_connect+
inet_
tcp_
Unfortunately the stack traces miss the details about going into ip_route_connect, but with more printks I know that ip_route_ output_ flow() is the one failing with -EINVAL.
Comparing functions between 3.5 and current linux-HEAD I was not very successful in spotting the important difference.