Message ID | 20250302162137.698092-1-maxime.chevallier@bootlin.com (mailing list archive) |
---|---|
State | New |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] net: ethtool: Set the req_info->dev on DUMP requests for each dev | expand |
diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c index b4c45207fa32..de967961d8fe 100644 --- a/net/ethtool/netlink.c +++ b/net/ethtool/netlink.c @@ -582,6 +582,7 @@ static int ethnl_default_dumpit(struct sk_buff *skb, dev_hold(dev); rcu_read_unlock(); + ctx->req_info->dev = dev; ret = ethnl_default_dump_one(skb, dev, ctx, genl_info_dump(cb)); rcu_read_lock();
There are a few netlink commands that rely on the req_info->dev field being populated by ethnl in their ->prepare_data() and ->fill_reply(). For a regular GET request, this will be set by ethnl_default_parse(), which calls ethnl_parse_header_dev_get(). In the case of a DUMP request, the ->prepare_data() and ->fill_reply() callbacks will be called with the req_info->dev being NULL, which can cause discrepancies in the behaviour between GET and DUMP results. The main impact is that ethnl_req_get_phydev() will not find any phy_device, impacting : - plca - pse-pd - stats Some other commands rely on req_info->dev, namely : - coalesce in ->fill_reply to look for an irq_moder Although cable_test and tunnels also rely on req_info->dev being set, that's not a problem for these commands as : - cable_test doesn't support DUMP - tunnels rolls its own ->dumpit (and sets dev in the req_info). - phy also has its own ->dumpit All other commands use reply_data->dev (probably the correct way of doing things) and aren't facing this issue. Simply set the dev in the req_info context when iterating to dump each dev. Fixes: c15e065b46dc ("net: ethtool: Allow passing a phy index for some commands") Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com> --- Fixes tag targets the phy-index commit, as it introduced a change in behaviour for PLCA. From what I can tell, coalesce never correctly detected irq_moder in DUMP requests. We could also consider fixing all individual commands that use req_info->dev, however I'm not actually sure it's incorrect to do so, feel free to correct me though. Maxime net/ethtool/netlink.c | 1 + 1 file changed, 1 insertion(+)