- There are two paths in the vrouter code where interfaces (OS visible
interfaces - netdev to be specific) are manipulated. One is in the call chain
to process agent request and the other is when the interface is deleted by linux
(for e.g.: a pseudo or a tap interface going away resulting in the notifier call
chain). In the latter path, netlink lock is acquired by the notifier chain,
whereas in the former path there is no netlink lock.

However, the common functions that are called in both paths need netlink lock.
The logic we had till now to decide whether we need to acquire lock in the
common functions is embarassingly buggy. rtnl_is_locked just says whether the
lock is locked or not and not whether the lock is owned by the thread or not,
as is in usage right now. So, in many cases it is possible that the lock is not
acquired, resulting in kernel warnings.

I guess, the usage was good when it was first used, but the subsequent copies of
the usage is not what is needed. To fix this issue, restructure the code path in
such a way that when common functions are entered, the lock is already taken.

BUG 1349258

- In 2.6.32-358.123.2.openstack.el6 kernel (and I guess all openstack kernels), the
first field in the skb->cb is an offset field that is used to calculate header length.
In those kernels, skb->cb is a structure of type skb_gso_cb with one field. Need to
set that field to zero.

BUG 1349560

Change-Id: I1e7e7b0e2f7cc7ee74b6db5ee91c347b7193a83b