aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jakub Kicinski <kuba@kernel.org> 2024-02-29 17:13:31 -0800
committerGravatar David S. Miller <davem@davemloft.net> 2024-03-04 10:12:59 +0000
commit429679dcf7d918b7bb523d89bde3307fb02496c3 (patch)
tree02a898766aed376d6e691e2d3949dfdc28cd355c
parentgeneve: make sure to pull inner header in geneve_rx() (diff)
downloadlinux-429679dcf7d9.tar.gz
linux-429679dcf7d9.tar.bz2
linux-429679dcf7d9.zip
page_pool: fix netlink dump stop/resume
If message fills up we need to stop writing. 'break' will only get us out of the iteration over pools of a single netdev, we need to also stop walking netdevs. This results in either infinite dump, or missing pools, depending on whether message full happens on the last netdev (infinite dump) or non-last (missing pools). Fixes: 950ab53b77ab ("net: page_pool: implement GET in the netlink API") Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/core/page_pool_user.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/core/page_pool_user.c b/net/core/page_pool_user.c
index ffe5244e5597..278294aca66a 100644
--- a/net/core/page_pool_user.c
+++ b/net/core/page_pool_user.c
@@ -94,11 +94,12 @@ netdev_nl_page_pool_get_dump(struct sk_buff *skb, struct netlink_callback *cb,
state->pp_id = pool->user.id;
err = fill(skb, pool, info);
if (err)
- break;
+ goto out;
}
state->pp_id = 0;
}
+out:
mutex_unlock(&page_pools_lock);
rtnl_unlock();