datapath: test for netlink_set_err returning void
authorSimon Horman <simon.horman@netronome.com>
Fri, 27 Nov 2015 06:07:23 +0000 (22:07 -0800)
committerPravin B Shelar <pshelar@ovn.org>
Fri, 29 Jan 2016 03:02:54 +0000 (19:02 -0800)
In v2.6.33 netlink_set_err returns void. However, 1a50307ba182 ("netlink:
fix NETLINK_RECV_NO_ENOBUFS in netlink_set_err()") was backported and
included in v2.6.33.2 and in that and subsequent v2.6.33 stable releases
netlink_set_err returns an int.

It seems plausible that there are other backports floating around. So check
for netlink_set_err returning void rather than including compatibility code
based on the version of the kernel.

Signed-off-by: Simon Horman <simon.horman@netronome.com>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
acinclude.m4
datapath/linux/compat/include/net/genetlink.h

index 6771f48..c5a1c44 100644 (file)
@@ -490,6 +490,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
   OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_put_in_addr])
   OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_find_nested])
   OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_is_last])
+  OVS_GREP_IFELSE([$KSRC/include/linux/netlink.h], [void.*netlink_set_err],
+                  [OVS_DEFINE([HAVE_VOID_NETLINK_SET_ERR])])
 
   OVS_GREP_IFELSE([$KSRC/include/net/sctp/checksum.h], [sctp_compute_cksum])
 
index cf89d4c..2830fa3 100644 (file)
@@ -67,7 +67,7 @@ static inline int rpl_genl_unregister_family(struct genl_family *family)
 static inline int genl_set_err(struct genl_family *family, struct net *net,
                               u32 portid, u32 group, int code)
 {
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
+#ifdef HAVE_VOID_NETLINK_SET_ERR
        netlink_set_err(net->genl_sock, portid, group, code);
        return 0;
 #else