can: fix WARN_ON dump in net/core/rtnetlink.c:rtmsg_ifinfo()
Subsystems (3)
PATCH 1/1 can: fix WARN_ON dump in net/core/rtnetlink.c:rtmsg_ifinfo()
On older kernels, e.g. 2.6.27, a WARN_ON dump in rtmsg_ifinfo() is thrown when the CAN device is registered due to insufficient skb space, as reported by various users. This patch adds the rtnl_link_ops "get_size" to fix the problem. I think this patch is required for more recent kernels as well, even if no WARN_ON dumps are triggered. Maybe we also need "get_xstats_size" for the CAN xstats.
--- drivers/net/can/dev.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
drivers/net/can/dev.c +17 -0
@@ -637,6 +637,22 @@ static int can_changelink(struct net_devreturn 0 ; } +static size_t can_get_size (const struct net_device *dev) +{ +struct can_priv *priv =netdev_priv (dev); +size_t size; + + size =nla_total_size (sizeof (u32));/* IFLA_CAN_STATE */ + size +=sizeof (struct can_ctrlmode );/* IFLA_CAN_CTRLMODE */ + size +=nla_total_size (sizeof (u32));/* IFLA_CAN_RESTART_MS */ + size +=sizeof (struct can_bittiming );/* IFLA_CAN_BITTIMING */ + size +=sizeof (struct can_clock );/* IFLA_CAN_CLOCK */ +if (priv->bittiming_const)/* IFLA_CAN_BITTIMING_CONST */ + size +=sizeof (struct can_bittiming_const ); + +return size; +} +static int can_fill_info (struct sk_buff *skb,const struct net_device *dev) {struct can_priv *priv =netdev_priv (dev);
@@ -687,6 +703,7 @@ static struct rtnl_link_ops can_link_ops .setup = can_setup, .newlink = can_newlink, .changelink = can_changelink, + .get_size = can_get_size, .fill_info = can_fill_info, .fill_xstats = can_fill_xstats, };
From: Wolfgang Grandegger <[email protected]>
Date: Sat, 07 Nov 2009 10:53:13 +0100
Quoted 9 lines
On older kernels, e.g. 2.6.27, a
WARN_ONdump inrtmsg_ifinfo()is thrown when the CAN device is registered due to insufficient skb space, as reported by various users. This patch adds thertnl_link_ops"get_size" to fix the problem. I think this patch is required for more recent kernels as well, even if noWARN_ONdumps are triggered. Maybe we also need "get_xstats_size" for the CAN xstats.Signed-off-by Wolfgang Grandegger <[email protected]>
Applied to net-2.6, thanks Wolfgang.
A message that is not in the archive (sent off-list or not yet received): 20091108.004602.213063654.davem-fT/PcQaiUtIeIZ0/[email protected]
Quoted 11 lines · David Miller
From: Wolfgang Grandegger <[email protected]>
Date: Sat, 07 Nov 2009 10:53:13 +0100Quoted 8 lines
On older kernels, e.g. 2.6.27, a
WARN_ONdump inrtmsg_ifinfo()is thrown when the CAN device is registered due to insufficient skb space, as reported by various users. This patch adds thertnl_link_ops"get_size" to fix the problem. I think this patch is required for more recent kernels as well, even if noWARN_ONdumps are triggered. Maybe we also need "get_xstats_size" for the CAN xstats.
Quoted 3 lines
Quoted 1 line
Signed-off-by Wolfgang Grandegger <[email protected]>Applied to net-2.6, thanks Wolfgang.
Thanks, the commit message included some questions. What is the rule using the rtnl_link_ops "get_size" or "get_xstats_size". Are these mandatory if the corresponding fill functions are used?
Wolfgang.
Quoted 12 lines · Wolfgang Grandegger
Quoted 11 lines · David Miller
From: Wolfgang Grandegger <[email protected]>
Date: Sat, 07 Nov 2009 10:53:13 +0100Quoted 8 lines
On older kernels, e.g. 2.6.27, a
WARN_ONdump inrtmsg_ifinfo()is thrown when the CAN device is registered due to insufficient skb space, as reported by various users. This patch adds thertnl_link_ops"get_size" to fix the problem. I think this patch is required for more recent kernels as well, even if noWARN_ONdumps are triggered. Maybe we also need "get_xstats_size" for the CAN xstats.
Quoted 6 lines
Quoted 2 lines
Quoted 1 line
Signed-off-by Wolfgang Grandegger <[email protected]>Applied to net-2.6, thanks Wolfgang.
Thanks, the commit message included some questions. What is the rule using the
rtnl_link_ops"get_size" or "get_xstats_size". Are these mandatory if the corresponding fill functions are used?
Yes. You also need a get_xstats_size() function.
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 13 lines · Patrick McHardy
Quoted 12 lines · Wolfgang Grandegger
Quoted 11 lines · David Miller
From: Wolfgang Grandegger <[email protected]>
Date: Sat, 07 Nov 2009 10:53:13 +0100Quoted 8 lines
On older kernels, e.g. 2.6.27, a
WARN_ONdump inrtmsg_ifinfo()is thrown when the CAN device is registered due to insufficient skb space, as reported by various users. This patch adds thertnl_link_ops"get_size" to fix the problem. I think this patch is required for more recent kernels as well, even if noWARN_ONdumps are triggered. Maybe we also need "get_xstats_size" for the CAN xstats.
Quoted 7 lines
Quoted 5 lines
Quoted 2 lines
Quoted 1 line
Signed-off-by Wolfgang Grandegger <[email protected]>Applied to net-2.6, thanks Wolfgang.
Thanks, the commit message included some questions. What is the rule using the
rtnl_link_ops"get_size" or "get_xstats_size". Are these mandatory if the corresponding fill functions are used?Yes. You also need a
get_xstats_size()function.
Thanks for clarification. I will provide a patch a.s.a.p.
Wolfgang.