rps: memory leak due to forget to release rx queues
Subsystems (2)
PATCH 1/1 rps: memory leak due to forget to release rx queues
memory leak due to forget to release rx queues.
rx queues is allocated in alloc_netdev_mq(), but they aren't released in free_netdev(), and the field rps_map is also miss.
----net/core/dev.c | 8 ++++++++
1 file changed, 8 insertions(+)
net/core/dev.c +8 -0
@@ -5746,6 +5746,14 @@ void free_netdev(struct net_device *dev)release_net (dev_net (dev)); +if (dev->num_rx_queues) { +int i; + +for (i =0 ; i < dev->num_rx_queues; i++) +kfree (dev->_rx[i].rps_map); +kfree (dev->_rx); + } +kfree (dev->_tx);/* Flush device addresses */
2010/3/22 Changli Gao <[email protected]>:
Quoted 5 lines
memory leak due to forget to release rx queues.
rx queues is allocated in
alloc_netdev_mq(), but they aren't released infree_netdev(), and the fieldrps_mapis also miss.
rx_queues can't be free from free_netdev since they contain kobjects (only freed when refcnt goes to zero). They should be freed when the device kobject is freed (netdev_unregister_kobject).
Tom
Quoted 27 lines
Signed-off-by Changli Gao <[email protected]>----
net/core/dev.c| 8 ++++++++1 file changed, 8 insertions(+)net/core/dev.c +8
-0@@ -5746,6 +5746,14 @@ void free_netdev(struct net_device *dev) release_net(dev_net(dev)); + if (dev->num_rx_queues) { + int i; + + for (i = 0; i < dev->num_rx_queues; i++) + kfree(dev->_rx[i].rps_map); + kfree(dev->_rx); + } + kfree(dev->_tx); /* Flush device addresses */
Quoted 6 lines · Tom Herbert
2010/3/22 Changli Gao <[email protected]>:
Quoted 5 lines
memory leak due to forget to release rx queues.
rx queues is allocated in
alloc_netdev_mq(), but they aren't released infree_netdev(), and the fieldrps_mapis also miss.
Thanks for explaining.
Signature · 2 lines
Regards, Changli Gao([email protected])