diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2011-10-20 04:29:24 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-10-21 02:53:07 -0400 |
commit | e09eff7fc1c6f011f7bdb304e10d2ceef08c88ab (patch) | |
tree | 170603217dedb0434244f4ef35928e6267cd5105 /include/linux/if_macvlan.h | |
parent | 9bf1907f4293d61d5a283d18c4ad28d048261797 (diff) | |
download | linux-stable-e09eff7fc1c6f011f7bdb304e10d2ceef08c88ab.tar.gz linux-stable-e09eff7fc1c6f011f7bdb304e10d2ceef08c88ab.tar.bz2 linux-stable-e09eff7fc1c6f011f7bdb304e10d2ceef08c88ab.zip |
macvtap: Fix the minor device number allocation
On systems that create and delete lots of dynamic devices the
31bit linux ifindex fails to fit in the 16bit macvtap minor,
resulting in unusable macvtap devices. I have systems running
automated tests that that hit this condition in just a few days.
Use a linux idr allocator to track which mavtap minor numbers
are available and and to track the association between macvtap
minor numbers and macvtap network devices.
Remove the unnecessary unneccessary check to see if the network
device we have found is indeed a macvtap device. With macvtap
specific data structures it is impossible to find any other
kind of networking device.
Increase the macvtap minor range from 65536 to the full 20 bits
that is supported by linux device numbers. It doesn't solve the
original problem but there is no penalty for a larger minor
device range.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/if_macvlan.h')
-rw-r--r-- | include/linux/if_macvlan.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h index e28b2e4959d4..d103dca5c563 100644 --- a/include/linux/if_macvlan.h +++ b/include/linux/if_macvlan.h @@ -64,6 +64,7 @@ struct macvlan_dev { int (*forward)(struct net_device *dev, struct sk_buff *skb); struct macvtap_queue *taps[MAX_MACVTAP_QUEUES]; int numvtaps; + int minor; }; static inline void macvlan_count_rx(const struct macvlan_dev *vlan, |