rtnetlink: Compute and store minimum ifinfo dump size
The message size allocated for rtnl ifinfo dumps was limited to a single page. This is not enough for additional interface info available with devices that support SR-IOV and caused a bug in which VF info would not be displayed if more than approximately 40 VFs were created per interface. Implement a new function pointer for the rtnl_register service that will calculate the amount of data required for the ifinfo dump and allocate enough data to satisfy the request. Signed-off-by: Greg Rose <gregory.v.rose@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
@@ -4727,16 +4727,20 @@ int __init addrconf_init(void)
|
||||
if (err < 0)
|
||||
goto errout_af;
|
||||
|
||||
err = __rtnl_register(PF_INET6, RTM_GETLINK, NULL, inet6_dump_ifinfo);
|
||||
err = __rtnl_register(PF_INET6, RTM_GETLINK, NULL, inet6_dump_ifinfo,
|
||||
NULL);
|
||||
if (err < 0)
|
||||
goto errout;
|
||||
|
||||
/* Only the first call to __rtnl_register can fail */
|
||||
__rtnl_register(PF_INET6, RTM_NEWADDR, inet6_rtm_newaddr, NULL);
|
||||
__rtnl_register(PF_INET6, RTM_DELADDR, inet6_rtm_deladdr, NULL);
|
||||
__rtnl_register(PF_INET6, RTM_GETADDR, inet6_rtm_getaddr, inet6_dump_ifaddr);
|
||||
__rtnl_register(PF_INET6, RTM_GETMULTICAST, NULL, inet6_dump_ifmcaddr);
|
||||
__rtnl_register(PF_INET6, RTM_GETANYCAST, NULL, inet6_dump_ifacaddr);
|
||||
__rtnl_register(PF_INET6, RTM_NEWADDR, inet6_rtm_newaddr, NULL, NULL);
|
||||
__rtnl_register(PF_INET6, RTM_DELADDR, inet6_rtm_deladdr, NULL, NULL);
|
||||
__rtnl_register(PF_INET6, RTM_GETADDR, inet6_rtm_getaddr,
|
||||
inet6_dump_ifaddr, NULL);
|
||||
__rtnl_register(PF_INET6, RTM_GETMULTICAST, NULL,
|
||||
inet6_dump_ifmcaddr, NULL);
|
||||
__rtnl_register(PF_INET6, RTM_GETANYCAST, NULL,
|
||||
inet6_dump_ifacaddr, NULL);
|
||||
|
||||
ipv6_addr_label_rtnl_register();
|
||||
|
||||
|
Reference in New Issue
Block a user