Hi there. I'm doing some research & am writing a linux module that implements a tc scheduler in a 'router' (linux 2.4 Mandrake), & a module that changes the awnd in the 'receiver' (linux 2.6 Debian). The 'sender' (linux 2.4 Redhat) is un-changed & runs a client iperf connection to the receiver. I have the following:
sender -> router -> receiver

It's been working fine but I made some changes and am now finding that whenever the receiver initiates a connection to the router (not as part of the experiment but just to grab the results file using scp at the end) the router is crashing. It's complaining about the module attempting to free a skb with a non-empty list in it (skb->list != null). (In the router module I insert a TCP option in to the packet so sometimes I need to use skb_copy_expand to make room for the option. If I use this function I then free the old skb, which is causing the router to crash (only on connections going the opposite direction to what's shown above).)

I tried to null the list in the old skb (since I assumed it would still exist in the new skb, & I also tried not freeing the memory for skb's with non-null lists (though I realise that's not optimal since it creates a memory leak). Either way, neither fix worked & I'm now at a loss. (My changes didn't touch this code so I can't think why it's suddenly a problem?)

Any suggestions would be very much appreciated.