linux-ppp.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v2 0/5] net: add netlink_ext_ack support to rtnl_link_ops
@ 2017-06-25 21:55 Matthias Schiffer
  2017-06-25 21:55 ` [PATCH net-next v2 1/5] net: add netlink_ext_ack argument to rtnl_link_ops.newlink Matthias Schiffer
                   ` (5 more replies)
  0 siblings, 6 replies; 18+ messages in thread
From: Matthias Schiffer @ 2017-06-25 21:55 UTC (permalink / raw)
  To: dledford-H+wXaHxf7aLQT0dZR+AlfA,
	sean.hefty-ral2JQCrhuEAvxtiuMwx3w,
	hal.rosenstock-Re5JQEeQqe8AvxtiuMwx3w,
	j.vosburgh-Re5JQEeQqe8AvxtiuMwx3w,
	vfalico-Re5JQEeQqe8AvxtiuMwx3w, andy-QlMahl40kYEqcZcGjlUOXw,
	wg-5Yr1BZd7O62+XT7JhA+gdA, mkl-bIcnvbaLZ9MEGnE8C9+IrQ,
	pablo-Cap9r6Oaw4JrovVCs/uTlw, laforge-TgoAw6mPHtdg9hUCZPvPmw,
	paulus-eUNUBHrolfbYtjvyW6yDsg, jiri-rHqAuBHg3fBzbRFIqnYvSA,
	dsa-qUQiAmfTcIp+XZJcv9eMoEEOCMrvLtNR,
	shm-qUQiAmfTcIp+XZJcv9eMoEEOCMrvLtNR,
	davem-fT/PcQaiUtIeIZ0/mPfg9Q,
	stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ,
	arvid.brodin-SVm98a2vdck, alex.aring-Re5JQEeQqe8AvxtiuMwx3w,
	stefan-JPH+aEBZ4P+UEJcrhfAQsw, kuznet-v/Mj1YrvjDBInbfyfbPRSQ,
	jmorris-gx6/JNMH7DfYtjvyW6yDsg, yoshfuji-VfPWfsRibaP+Ru+s062T9g,
	kaber-dcUjhNyLwpNeoWH0uzbU5w,
	steffen.klassert-opNxpl+3fjRBDgjK7y7TUQ,
	herbert-lOAM2aK0SrRLBo1qDEOMRrpzq4S04n8Q,
	johannes-cdvu00un1VgdHxzADdlk8Q
  Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA, linux-can-u79uwXL29TY76Z2rM5mHXA,
	linux-ppp-u79uwXL29TY76Z2rM5mHXA,
	linux-wpan-u79uwXL29TY76Z2rM5mHXA

Same changes as http://patchwork.ozlabs.org/patch/780351/ , split into
separate patches for each rtnl_link_ops field as requested.


Matthias Schiffer (5):
  net: add netlink_ext_ack argument to rtnl_link_ops.newlink
  net: add netlink_ext_ack argument to rtnl_link_ops.changelink
  net: add netlink_ext_ack argument to rtnl_link_ops.validate
  net: add netlink_ext_ack argument to rtnl_link_ops.slave_changelink
  net: add netlink_ext_ack argument to rtnl_link_ops.slave_validate

 drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 10 ++++++----
 drivers/net/bonding/bond_netlink.c           | 16 ++++++++++------
 drivers/net/caif/caif_hsi.c                  |  6 ++++--
 drivers/net/can/dev.c                        | 11 +++++++----
 drivers/net/can/vxcan.c                      |  3 ++-
 drivers/net/dummy.c                          |  3 ++-
 drivers/net/geneve.c                         |  6 ++++--
 drivers/net/gtp.c                            |  6 ++++--
 drivers/net/ifb.c                            |  3 ++-
 drivers/net/ipvlan/ipvlan.h                  |  3 ++-
 drivers/net/ipvlan/ipvlan_main.c             |  9 ++++++---
 drivers/net/ipvlan/ipvtap.c                  |  9 ++++-----
 drivers/net/macsec.c                         |  9 ++++++---
 drivers/net/macvlan.c                        |  9 ++++++---
 drivers/net/macvtap.c                        |  7 +++----
 drivers/net/nlmon.c                          |  3 ++-
 drivers/net/ppp/ppp_generic.c                |  6 ++++--
 drivers/net/team/team.c                      |  6 ++++--
 drivers/net/tun.c                            |  3 ++-
 drivers/net/veth.c                           |  8 +++++---
 drivers/net/vrf.c                            |  6 ++++--
 drivers/net/vxlan.c                          |  9 ++++++---
 include/net/rtnetlink.h                      | 15 ++++++++++-----
 net/8021q/vlan_netlink.c                     | 13 ++++++++-----
 net/bridge/br_netlink.c                      | 15 ++++++++++-----
 net/caif/chnl_net.c                          |  6 ++++--
 net/core/rtnetlink.c                         | 13 ++++++++-----
 net/hsr/hsr_netlink.c                        |  3 ++-
 net/ieee802154/6lowpan/core.c                |  6 ++++--
 net/ipv4/ip_gre.c                            | 16 ++++++++++------
 net/ipv4/ip_vti.c                            |  9 ++++++---
 net/ipv4/ipip.c                              |  9 ++++++---
 net/ipv6/ip6_gre.c                           | 14 +++++++++-----
 net/ipv6/ip6_tunnel.c                        |  9 ++++++---
 net/ipv6/ip6_vti.c                           |  9 ++++++---
 net/ipv6/sit.c                               |  9 ++++++---
 36 files changed, 190 insertions(+), 107 deletions(-)

-- 
2.13.1


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH net-next v2 1/5] net: add netlink_ext_ack argument to rtnl_link_ops.newlink
  2017-06-25 21:55 [PATCH net-next v2 0/5] net: add netlink_ext_ack support to rtnl_link_ops Matthias Schiffer
@ 2017-06-25 21:55 ` Matthias Schiffer
  2017-06-26  4:02   ` David Ahern
  2017-06-25 21:56 ` [PATCH net-next v2 2/5] net: add netlink_ext_ack argument to rtnl_link_ops.changelink Matthias Schiffer
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 18+ messages in thread
From: Matthias Schiffer @ 2017-06-25 21:55 UTC (permalink / raw)
  To: dledford, sean.hefty, hal.rosenstock, j.vosburgh, vfalico, andy,
	wg, mkl, pablo, laforge, paulus, jiri, dsa, shm, davem, stephen,
	arvid.brodin, alex.aring, stefan, kuznet, jmorris, yoshfuji,
	kaber, steffen.klassert, herbert, johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

Add support for extended error reporting.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
---
 drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 3 ++-
 drivers/net/bonding/bond_netlink.c           | 3 ++-
 drivers/net/caif/caif_hsi.c                  | 3 ++-
 drivers/net/can/dev.c                        | 3 ++-
 drivers/net/can/vxcan.c                      | 3 ++-
 drivers/net/geneve.c                         | 3 ++-
 drivers/net/gtp.c                            | 3 ++-
 drivers/net/ipvlan/ipvlan.h                  | 3 ++-
 drivers/net/ipvlan/ipvlan_main.c             | 3 ++-
 drivers/net/ipvlan/ipvtap.c                  | 9 ++++-----
 drivers/net/macsec.c                         | 3 ++-
 drivers/net/macvlan.c                        | 3 ++-
 drivers/net/macvtap.c                        | 7 +++----
 drivers/net/ppp/ppp_generic.c                | 3 ++-
 drivers/net/team/team.c                      | 3 ++-
 drivers/net/veth.c                           | 3 ++-
 drivers/net/vrf.c                            | 3 ++-
 drivers/net/vxlan.c                          | 3 ++-
 include/net/rtnetlink.h                      | 3 ++-
 net/8021q/vlan_netlink.c                     | 3 ++-
 net/bridge/br_netlink.c                      | 3 ++-
 net/caif/chnl_net.c                          | 3 ++-
 net/core/rtnetlink.c                         | 3 ++-
 net/hsr/hsr_netlink.c                        | 3 ++-
 net/ieee802154/6lowpan/core.c                | 3 ++-
 net/ipv4/ip_gre.c                            | 5 +++--
 net/ipv4/ip_vti.c                            | 3 ++-
 net/ipv4/ipip.c                              | 3 ++-
 net/ipv6/ip6_gre.c                           | 3 ++-
 net/ipv6/ip6_tunnel.c                        | 3 ++-
 net/ipv6/ip6_vti.c                           | 3 ++-
 net/ipv6/sit.c                               | 3 ++-
 32 files changed, 68 insertions(+), 40 deletions(-)

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
index 28884781311b..8b75f80da56c 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
@@ -93,7 +93,8 @@ static int ipoib_changelink(struct net_device *dev,
 }
 
 static int ipoib_new_child_link(struct net *src_net, struct net_device *dev,
-			       struct nlattr *tb[], struct nlattr *data[])
+				struct nlattr *tb[], struct nlattr *data[],
+				struct netlink_ext_ack *extack)
 {
 	struct net_device *pdev;
 	struct ipoib_dev_priv *ppriv;
diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
index 47a8103610bc..f817fb8005ef 100644
--- a/drivers/net/bonding/bond_netlink.c
+++ b/drivers/net/bonding/bond_netlink.c
@@ -438,7 +438,8 @@ static int bond_changelink(struct net_device *bond_dev,
 }
 
 static int bond_newlink(struct net *src_net, struct net_device *bond_dev,
-			struct nlattr *tb[], struct nlattr *data[])
+			struct nlattr *tb[], struct nlattr *data[],
+			struct netlink_ext_ack *extack)
 {
 	int err;
 
diff --git a/drivers/net/caif/caif_hsi.c b/drivers/net/caif/caif_hsi.c
index 11ba6e3eea22..ed4723a9031f 100644
--- a/drivers/net/caif/caif_hsi.c
+++ b/drivers/net/caif/caif_hsi.c
@@ -1399,7 +1399,8 @@ static int caif_hsi_fill_info(struct sk_buff *skb, const struct net_device *dev)
 }
 
 static int caif_hsi_newlink(struct net *src_net, struct net_device *dev,
-			  struct nlattr *tb[], struct nlattr *data[])
+			    struct nlattr *tb[], struct nlattr *data[],
+			    struct netlink_ext_ack *extack)
 {
 	struct cfhsi *cfhsi = NULL;
 	struct cfhsi_ops *(*get_ops)(void);
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index a3011c001080..7f99e8a5dd09 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -1146,7 +1146,8 @@ static int can_fill_xstats(struct sk_buff *skb, const struct net_device *dev)
 }
 
 static int can_newlink(struct net *src_net, struct net_device *dev,
-		       struct nlattr *tb[], struct nlattr *data[])
+		       struct nlattr *tb[], struct nlattr *data[],
+		       struct netlink_ext_ack *extack)
 {
 	return -EOPNOTSUPP;
 }
diff --git a/drivers/net/can/vxcan.c b/drivers/net/can/vxcan.c
index cfe889e8f172..8404e8852a0f 100644
--- a/drivers/net/can/vxcan.c
+++ b/drivers/net/can/vxcan.c
@@ -163,7 +163,8 @@ static void vxcan_setup(struct net_device *dev)
 static struct rtnl_link_ops vxcan_link_ops;
 
 static int vxcan_newlink(struct net *net, struct net_device *dev,
-			 struct nlattr *tb[], struct nlattr *data[])
+			 struct nlattr *tb[], struct nlattr *data[],
+			 struct netlink_ext_ack *extack)
 {
 	struct vxcan_priv *priv;
 	struct net_device *peer;
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index d586ad93aaff..0a72d914e1f9 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -1181,7 +1181,8 @@ static void init_tnl_info(struct ip_tunnel_info *info, __u16 dst_port)
 }
 
 static int geneve_newlink(struct net *net, struct net_device *dev,
-			  struct nlattr *tb[], struct nlattr *data[])
+			  struct nlattr *tb[], struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	bool use_udp6_rx_checksums = false;
 	struct ip_tunnel_info info;
diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
index 8e333a8a2295..9cfe8a24c1fc 100644
--- a/drivers/net/gtp.c
+++ b/drivers/net/gtp.c
@@ -636,7 +636,8 @@ static void gtp_hashtable_free(struct gtp_dev *gtp);
 static int gtp_encap_enable(struct gtp_dev *gtp, struct nlattr *data[]);
 
 static int gtp_newlink(struct net *src_net, struct net_device *dev,
-			struct nlattr *tb[], struct nlattr *data[])
+		       struct nlattr *tb[], struct nlattr *data[],
+		       struct netlink_ext_ack *extack)
 {
 	struct gtp_dev *gtp;
 	struct gtp_net *gn;
diff --git a/drivers/net/ipvlan/ipvlan.h b/drivers/net/ipvlan/ipvlan.h
index 7919369c0a72..ba8173a0b62e 100644
--- a/drivers/net/ipvlan/ipvlan.h
+++ b/drivers/net/ipvlan/ipvlan.h
@@ -140,7 +140,8 @@ unsigned int ipvlan_nf_input(void *priv, struct sk_buff *skb,
 void ipvlan_count_rx(const struct ipvl_dev *ipvlan,
 		     unsigned int len, bool success, bool mcast);
 int ipvlan_link_new(struct net *src_net, struct net_device *dev,
-		    struct nlattr *tb[], struct nlattr *data[]);
+		    struct nlattr *tb[], struct nlattr *data[],
+		    struct netlink_ext_ack *extack);
 void ipvlan_link_delete(struct net_device *dev, struct list_head *head);
 void ipvlan_link_setup(struct net_device *dev);
 int ipvlan_link_register(struct rtnl_link_ops *ops);
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
index dc888dd344eb..7bda5f630ac9 100644
--- a/drivers/net/ipvlan/ipvlan_main.c
+++ b/drivers/net/ipvlan/ipvlan_main.c
@@ -508,7 +508,8 @@ static int ipvlan_nl_fillinfo(struct sk_buff *skb,
 }
 
 int ipvlan_link_new(struct net *src_net, struct net_device *dev,
-		    struct nlattr *tb[], struct nlattr *data[])
+		    struct nlattr *tb[], struct nlattr *data[],
+		    struct netlink_ext_ack *extack)
 {
 	struct ipvl_dev *ipvlan = netdev_priv(dev);
 	struct ipvl_port *port;
diff --git a/drivers/net/ipvlan/ipvtap.c b/drivers/net/ipvlan/ipvtap.c
index 2b713b63b62c..22f133ea8d7b 100644
--- a/drivers/net/ipvlan/ipvtap.c
+++ b/drivers/net/ipvlan/ipvtap.c
@@ -73,10 +73,9 @@ static void ipvtap_update_features(struct tap_dev *tap,
 	netdev_update_features(vlan->dev);
 }
 
-static int ipvtap_newlink(struct net *src_net,
-			  struct net_device *dev,
-			  struct nlattr *tb[],
-			  struct nlattr *data[])
+static int ipvtap_newlink(struct net *src_net, struct net_device *dev,
+			  struct nlattr *tb[], struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	struct ipvtap_dev *vlantap = netdev_priv(dev);
 	int err;
@@ -98,7 +97,7 @@ static int ipvtap_newlink(struct net *src_net,
 	/* Don't put anything that may fail after macvlan_common_newlink
 	 * because we can't undo what it does.
 	 */
-	err =  ipvlan_link_new(src_net, dev, tb, data);
+	err =  ipvlan_link_new(src_net, dev, tb, data, extack);
 	if (err) {
 		netdev_rx_handler_unregister(dev);
 		return err;
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index e370d7c894cb..60f3e3089ec3 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -3203,7 +3203,8 @@ static int macsec_add_dev(struct net_device *dev, sci_t sci, u8 icv_len)
 }
 
 static int macsec_newlink(struct net *net, struct net_device *dev,
-			  struct nlattr *tb[], struct nlattr *data[])
+			  struct nlattr *tb[], struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	struct macsec_dev *macsec = macsec_priv(dev);
 	struct net_device *real_dev;
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 8ca274c6df3d..526d23db3b71 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -1390,7 +1390,8 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
 EXPORT_SYMBOL_GPL(macvlan_common_newlink);
 
 static int macvlan_newlink(struct net *src_net, struct net_device *dev,
-			   struct nlattr *tb[], struct nlattr *data[])
+			   struct nlattr *tb[], struct nlattr *data[],
+			   struct netlink_ext_ack *extack)
 {
 	return macvlan_common_newlink(src_net, dev, tb, data);
 }
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
index da85057680d6..91e7b19bbf86 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -77,10 +77,9 @@ static void macvtap_update_features(struct tap_dev *tap,
 	netdev_update_features(vlan->dev);
 }
 
-static int macvtap_newlink(struct net *src_net,
-			   struct net_device *dev,
-			   struct nlattr *tb[],
-			   struct nlattr *data[])
+static int macvtap_newlink(struct net *src_net, struct net_device *dev,
+			   struct nlattr *tb[], struct nlattr *data[],
+			   struct netlink_ext_ack *extack)
 {
 	struct macvtap_dev *vlantap = netdev_priv(dev);
 	int err;
diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
index d42091f11eb8..8479c130fe2e 100644
--- a/drivers/net/ppp/ppp_generic.c
+++ b/drivers/net/ppp/ppp_generic.c
@@ -1075,7 +1075,8 @@ static int ppp_nl_validate(struct nlattr *tb[], struct nlattr *data[])
 }
 
 static int ppp_nl_newlink(struct net *src_net, struct net_device *dev,
-			  struct nlattr *tb[], struct nlattr *data[])
+			  struct nlattr *tb[], struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	struct ppp_config conf = {
 		.unit = -1,
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 629a412dc690..bbe97bb7c9cc 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -2101,7 +2101,8 @@ static void team_setup(struct net_device *dev)
 }
 
 static int team_newlink(struct net *src_net, struct net_device *dev,
-			struct nlattr *tb[], struct nlattr *data[])
+			struct nlattr *tb[], struct nlattr *data[],
+			struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS] = NULL)
 		eth_hw_addr_random(dev);
diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index 0156fe8cac17..3db907cb7d07 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -347,7 +347,8 @@ static int veth_validate(struct nlattr *tb[], struct nlattr *data[])
 static struct rtnl_link_ops veth_link_ops;
 
 static int veth_newlink(struct net *src_net, struct net_device *dev,
-			 struct nlattr *tb[], struct nlattr *data[])
+			struct nlattr *tb[], struct nlattr *data[],
+			struct netlink_ext_ack *extack)
 {
 	int err;
 	struct net_device *peer;
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
index 997ef25189fd..762f4d033e1b 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
@@ -1389,7 +1389,8 @@ static void vrf_dellink(struct net_device *dev, struct list_head *head)
 }
 
 static int vrf_newlink(struct net *src_net, struct net_device *dev,
-		       struct nlattr *tb[], struct nlattr *data[])
+		       struct nlattr *tb[], struct nlattr *data[],
+		       struct netlink_ext_ack *extack)
 {
 	struct net_vrf *vrf = netdev_priv(dev);
 	bool *add_fib_rules;
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 653b2bb32be1..50a208747179 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -3333,7 +3333,8 @@ static int vxlan_nl2conf(struct nlattr *tb[], struct nlattr *data[],
 }
 
 static int vxlan_newlink(struct net *src_net, struct net_device *dev,
-			 struct nlattr *tb[], struct nlattr *data[])
+			 struct nlattr *tb[], struct nlattr *data[],
+			 struct netlink_ext_ack *extack)
 {
 	struct vxlan_config conf;
 	int err;
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h
index 78fa5fe32947..33332a104ac5 100644
--- a/include/net/rtnetlink.h
+++ b/include/net/rtnetlink.h
@@ -68,7 +68,8 @@ struct rtnl_link_ops {
 	int			(*newlink)(struct net *src_net,
 					   struct net_device *dev,
 					   struct nlattr *tb[],
-					   struct nlattr *data[]);
+					   struct nlattr *data[],
+					   struct netlink_ext_ack *extack);
 	int			(*changelink)(struct net_device *dev,
 					      struct nlattr *tb[],
 					      struct nlattr *data[]);
diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c
index 9c94aad153b3..11b74e2b1036 100644
--- a/net/8021q/vlan_netlink.c
+++ b/net/8021q/vlan_netlink.c
@@ -115,7 +115,8 @@ static int vlan_changelink(struct net_device *dev,
 }
 
 static int vlan_newlink(struct net *src_net, struct net_device *dev,
-			struct nlattr *tb[], struct nlattr *data[])
+			struct nlattr *tb[], struct nlattr *data[],
+			struct netlink_ext_ack *extack)
 {
 	struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 	struct net_device *real_dev;
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index 63dca347b73b..39c1fa104c8d 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
@@ -1213,7 +1213,8 @@ static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
 }
 
 static int br_dev_newlink(struct net *src_net, struct net_device *dev,
-			  struct nlattr *tb[], struct nlattr *data[])
+			  struct nlattr *tb[], struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	struct net_bridge *br = netdev_priv(dev);
 	int err;
diff --git a/net/caif/chnl_net.c b/net/caif/chnl_net.c
index fe3c53efb949..3ad833cd042f 100644
--- a/net/caif/chnl_net.c
+++ b/net/caif/chnl_net.c
@@ -461,7 +461,8 @@ static void caif_netlink_parms(struct nlattr *data[],
 }
 
 static int ipcaif_newlink(struct net *src_net, struct net_device *dev,
-			  struct nlattr *tb[], struct nlattr *data[])
+			  struct nlattr *tb[], struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	int ret;
 	struct chnl_net *caifdev;
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 9a1bd510c812..8b3faa00905f 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -2705,7 +2705,8 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
 		dev->ifindex = ifm->ifi_index;
 
 		if (ops->newlink) {
-			err = ops->newlink(link_net ? : net, dev, tb, data);
+			err = ops->newlink(link_net ? : net, dev, tb, data,
+					   extack);
 			/* Drivers should call free_netdev() in ->destructor
 			 * and unregister it on failure after registration
 			 * so that device could be finally freed in rtnl_unlock.
diff --git a/net/hsr/hsr_netlink.c b/net/hsr/hsr_netlink.c
index 81dac16933fc..b9cce0fd5696 100644
--- a/net/hsr/hsr_netlink.c
+++ b/net/hsr/hsr_netlink.c
@@ -33,7 +33,8 @@ static const struct nla_policy hsr_policy[IFLA_HSR_MAX + 1] = {
  * hsr_dev_setup routine has been executed. Nice!
  */
 static int hsr_newlink(struct net *src_net, struct net_device *dev,
-		       struct nlattr *tb[], struct nlattr *data[])
+		       struct nlattr *tb[], struct nlattr *data[],
+		       struct netlink_ext_ack *extack)
 {
 	struct net_device *link[2];
 	unsigned char multicast_spec, hsr_version;
diff --git a/net/ieee802154/6lowpan/core.c b/net/ieee802154/6lowpan/core.c
index 0a866f332290..1a4c585f3950 100644
--- a/net/ieee802154/6lowpan/core.c
+++ b/net/ieee802154/6lowpan/core.c
@@ -121,7 +121,8 @@ static int lowpan_validate(struct nlattr *tb[], struct nlattr *data[])
 }
 
 static int lowpan_newlink(struct net *src_net, struct net_device *ldev,
-			  struct nlattr *tb[], struct nlattr *data[])
+			  struct nlattr *tb[], struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	struct net_device *wdev;
 	int ret;
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index 41394a4b9af9..989f29f2f0d5 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -957,7 +957,8 @@ static void ipgre_tap_setup(struct net_device *dev)
 }
 
 static int ipgre_newlink(struct net *src_net, struct net_device *dev,
-			 struct nlattr *tb[], struct nlattr *data[])
+			 struct nlattr *tb[], struct nlattr *data[],
+			 struct netlink_ext_ack *extack)
 {
 	struct ip_tunnel_parm p;
 	struct ip_tunnel_encap ipencap;
@@ -1155,7 +1156,7 @@ struct net_device *gretap_fb_dev_create(struct net *net, const char *name,
 	t = netdev_priv(dev);
 	t->collect_md = true;
 
-	err = ipgre_newlink(net, dev, tb, NULL);
+	err = ipgre_newlink(net, dev, tb, NULL, NULL);
 	if (err < 0) {
 		free_netdev(dev);
 		return ERR_PTR(err);
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
index 4ec9affb2252..d748c5017d3b 100644
--- a/net/ipv4/ip_vti.c
+++ b/net/ipv4/ip_vti.c
@@ -503,7 +503,8 @@ static void vti_netlink_parms(struct nlattr *data[],
 }
 
 static int vti_newlink(struct net *src_net, struct net_device *dev,
-		       struct nlattr *tb[], struct nlattr *data[])
+		       struct nlattr *tb[], struct nlattr *data[],
+		       struct netlink_ext_ack *extack)
 {
 	struct ip_tunnel_parm parms;
 	__u32 fwmark = 0;
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
index 1e441c6f2160..51132060397d 100644
--- a/net/ipv4/ipip.c
+++ b/net/ipv4/ipip.c
@@ -469,7 +469,8 @@ static bool ipip_netlink_encap_parms(struct nlattr *data[],
 }
 
 static int ipip_newlink(struct net *src_net, struct net_device *dev,
-			struct nlattr *tb[], struct nlattr *data[])
+			struct nlattr *tb[], struct nlattr *data[],
+			struct netlink_ext_ack *extack)
 {
 	struct ip_tunnel *t = netdev_priv(dev);
 	struct ip_tunnel_parm p;
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
index e0e726c338a7..f7c949d41fda 100644
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
@@ -1342,7 +1342,8 @@ static bool ip6gre_netlink_encap_parms(struct nlattr *data[],
 }
 
 static int ip6gre_newlink(struct net *src_net, struct net_device *dev,
-	struct nlattr *tb[], struct nlattr *data[])
+			  struct nlattr *tb[], struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	struct ip6_tnl *nt;
 	struct net *net = dev_net(dev);
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 8c6c3c8e7eef..ca12b2e33ae3 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -1974,7 +1974,8 @@ static bool ip6_tnl_netlink_encap_parms(struct nlattr *data[],
 }
 
 static int ip6_tnl_newlink(struct net *src_net, struct net_device *dev,
-			   struct nlattr *tb[], struct nlattr *data[])
+			   struct nlattr *tb[], struct nlattr *data[],
+			   struct netlink_ext_ack *extack)
 {
 	struct net *net = dev_net(dev);
 	struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
index 837ea1eefe7f..736a4f3f731d 100644
--- a/net/ipv6/ip6_vti.c
+++ b/net/ipv6/ip6_vti.c
@@ -940,7 +940,8 @@ static void vti6_netlink_parms(struct nlattr *data[],
 }
 
 static int vti6_newlink(struct net *src_net, struct net_device *dev,
-			struct nlattr *tb[], struct nlattr *data[])
+			struct nlattr *tb[], struct nlattr *data[],
+			struct netlink_ext_ack *extack)
 {
 	struct net *net = dev_net(dev);
 	struct ip6_tnl *nt;
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index 2378503577b0..f7445fdb5e64 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -1537,7 +1537,8 @@ static bool ipip6_netlink_6rd_parms(struct nlattr *data[],
 #endif
 
 static int ipip6_newlink(struct net *src_net, struct net_device *dev,
-			 struct nlattr *tb[], struct nlattr *data[])
+			 struct nlattr *tb[], struct nlattr *data[],
+			 struct netlink_ext_ack *extack)
 {
 	struct net *net = dev_net(dev);
 	struct ip_tunnel *nt;
-- 
2.13.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next v2 2/5] net: add netlink_ext_ack argument to rtnl_link_ops.changelink
  2017-06-25 21:55 [PATCH net-next v2 0/5] net: add netlink_ext_ack support to rtnl_link_ops Matthias Schiffer
  2017-06-25 21:55 ` [PATCH net-next v2 1/5] net: add netlink_ext_ack argument to rtnl_link_ops.newlink Matthias Schiffer
@ 2017-06-25 21:56 ` Matthias Schiffer
  2017-06-26  4:03   ` David Ahern
  2017-06-25 21:56 ` [PATCH net-next v2 3/5] net: add netlink_ext_ack argument to rtnl_link_ops.validate Matthias Schiffer
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 18+ messages in thread
From: Matthias Schiffer @ 2017-06-25 21:56 UTC (permalink / raw)
  To: dledford, sean.hefty, hal.rosenstock, j.vosburgh, vfalico, andy,
	wg, mkl, pablo, laforge, paulus, jiri, dsa, shm, davem, stephen,
	arvid.brodin, alex.aring, stefan, kuznet, jmorris, yoshfuji,
	kaber, steffen.klassert, herbert, johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

Add support for extended error reporting.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
---
 drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 7 ++++---
 drivers/net/bonding/bond_netlink.c           | 7 ++++---
 drivers/net/caif/caif_hsi.c                  | 3 ++-
 drivers/net/can/dev.c                        | 5 +++--
 drivers/net/ipvlan/ipvlan_main.c             | 3 ++-
 drivers/net/macsec.c                         | 3 ++-
 drivers/net/macvlan.c                        | 3 ++-
 drivers/net/vxlan.c                          | 3 ++-
 include/net/rtnetlink.h                      | 3 ++-
 net/8021q/vlan_netlink.c                     | 7 ++++---
 net/bridge/br_netlink.c                      | 5 +++--
 net/caif/chnl_net.c                          | 3 ++-
 net/core/rtnetlink.c                         | 2 +-
 net/ipv4/ip_gre.c                            | 3 ++-
 net/ipv4/ip_vti.c                            | 3 ++-
 net/ipv4/ipip.c                              | 3 ++-
 net/ipv6/ip6_gre.c                           | 3 ++-
 net/ipv6/ip6_tunnel.c                        | 3 ++-
 net/ipv6/ip6_vti.c                           | 3 ++-
 net/ipv6/sit.c                               | 3 ++-
 20 files changed, 47 insertions(+), 28 deletions(-)

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
index 8b75f80da56c..3e44087935ae 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
@@ -64,8 +64,9 @@ static int ipoib_fill_info(struct sk_buff *skb, const struct net_device *dev)
 	return -EMSGSIZE;
 }
 
-static int ipoib_changelink(struct net_device *dev,
-			    struct nlattr *tb[], struct nlattr *data[])
+static int ipoib_changelink(struct net_device *dev, struct nlattr *tb[],
+			    struct nlattr *data[],
+			    struct netlink_ext_ack *extack)
 {
 	u16 mode, umcast;
 	int ret = 0;
@@ -134,7 +135,7 @@ static int ipoib_new_child_link(struct net *src_net, struct net_device *dev,
 			       child_pkey, IPOIB_RTNL_CHILD);
 
 	if (!err && data)
-		err = ipoib_changelink(dev, tb, data);
+		err = ipoib_changelink(dev, tb, data, extack);
 	return err;
 }
 
diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
index f817fb8005ef..cb803c026f1f 100644
--- a/drivers/net/bonding/bond_netlink.c
+++ b/drivers/net/bonding/bond_netlink.c
@@ -156,8 +156,9 @@ static int bond_slave_changelink(struct net_device *bond_dev,
 	return 0;
 }
 
-static int bond_changelink(struct net_device *bond_dev,
-			   struct nlattr *tb[], struct nlattr *data[])
+static int bond_changelink(struct net_device *bond_dev, struct nlattr *tb[],
+			   struct nlattr *data[],
+			   struct netlink_ext_ack *extack)
 {
 	struct bonding *bond = netdev_priv(bond_dev);
 	struct bond_opt_value newval;
@@ -443,7 +444,7 @@ static int bond_newlink(struct net *src_net, struct net_device *bond_dev,
 {
 	int err;
 
-	err = bond_changelink(bond_dev, tb, data);
+	err = bond_changelink(bond_dev, tb, data, extack);
 	if (err < 0)
 		return err;
 
diff --git a/drivers/net/caif/caif_hsi.c b/drivers/net/caif/caif_hsi.c
index ed4723a9031f..438966bf51c2 100644
--- a/drivers/net/caif/caif_hsi.c
+++ b/drivers/net/caif/caif_hsi.c
@@ -1352,7 +1352,8 @@ static void cfhsi_netlink_parms(struct nlattr *data[], struct cfhsi *cfhsi)
 }
 
 static int caif_hsi_changelink(struct net_device *dev, struct nlattr *tb[],
-				struct nlattr *data[])
+			       struct nlattr *data[],
+			       struct netlink_ext_ack *extack)
 {
 	cfhsi_netlink_parms(data, netdev_priv(dev));
 	netdev_state_change(dev);
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index 7f99e8a5dd09..6d8191f2ad32 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -880,8 +880,9 @@ static int can_validate(struct nlattr *tb[], struct nlattr *data[])
 	return 0;
 }
 
-static int can_changelink(struct net_device *dev,
-			  struct nlattr *tb[], struct nlattr *data[])
+static int can_changelink(struct net_device *dev, struct nlattr *tb[],
+			  struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	struct can_priv *priv = netdev_priv(dev);
 	int err;
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
index 7bda5f630ac9..e7d54072d7b3 100644
--- a/drivers/net/ipvlan/ipvlan_main.c
+++ b/drivers/net/ipvlan/ipvlan_main.c
@@ -455,7 +455,8 @@ static const struct ethtool_ops ipvlan_ethtool_ops = {
 };
 
 static int ipvlan_nl_changelink(struct net_device *dev,
-				struct nlattr *tb[], struct nlattr *data[])
+				struct nlattr *tb[], struct nlattr *data[],
+				struct netlink_ext_ack *extack)
 {
 	struct ipvl_dev *ipvlan = netdev_priv(dev);
 	struct ipvl_port *port = ipvlan_port_get_rtnl(ipvlan->phy_dev);
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index 60f3e3089ec3..38ba3d73ac15 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -3056,7 +3056,8 @@ static void macsec_changelink_common(struct net_device *dev,
 }
 
 static int macsec_changelink(struct net_device *dev, struct nlattr *tb[],
-			     struct nlattr *data[])
+			     struct nlattr *data[],
+			     struct netlink_ext_ack *extack)
 {
 	if (!data)
 		return 0;
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 526d23db3b71..3064416578a9 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -1409,7 +1409,8 @@ void macvlan_dellink(struct net_device *dev, struct list_head *head)
 EXPORT_SYMBOL_GPL(macvlan_dellink);
 
 static int macvlan_changelink(struct net_device *dev,
-		struct nlattr *tb[], struct nlattr *data[])
+			      struct nlattr *tb[], struct nlattr *data[],
+			      struct netlink_ext_ack *extack)
 {
 	struct macvlan_dev *vlan = netdev_priv(dev);
 	enum macvlan_mode mode;
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 50a208747179..60c40349e73e 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -3347,7 +3347,8 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[],
-			    struct nlattr *data[])
+			    struct nlattr *data[],
+			    struct netlink_ext_ack *extack)
 {
 	struct vxlan_dev *vxlan = netdev_priv(dev);
 	struct vxlan_rdst *dst = &vxlan->default_dst;
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h
index 33332a104ac5..f7d0320f75b0 100644
--- a/include/net/rtnetlink.h
+++ b/include/net/rtnetlink.h
@@ -72,7 +72,8 @@ struct rtnl_link_ops {
 					   struct netlink_ext_ack *extack);
 	int			(*changelink)(struct net_device *dev,
 					      struct nlattr *tb[],
-					      struct nlattr *data[]);
+					      struct nlattr *data[],
+					      struct netlink_ext_ack *extack);
 	void			(*dellink)(struct net_device *dev,
 					   struct list_head *head);
 
diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c
index 11b74e2b1036..f08b5e192e45 100644
--- a/net/8021q/vlan_netlink.c
+++ b/net/8021q/vlan_netlink.c
@@ -87,8 +87,9 @@ static int vlan_validate(struct nlattr *tb[], struct nlattr *data[])
 	return 0;
 }
 
-static int vlan_changelink(struct net_device *dev,
-			   struct nlattr *tb[], struct nlattr *data[])
+static int vlan_changelink(struct net_device *dev, struct nlattr *tb[],
+			   struct nlattr *data[],
+			   struct netlink_ext_ack *extack)
 {
 	struct ifla_vlan_flags *flags;
 	struct ifla_vlan_qos_mapping *m;
@@ -154,7 +155,7 @@ static int vlan_newlink(struct net *src_net, struct net_device *dev,
 	else if (dev->mtu > max_mtu)
 		return -EINVAL;
 
-	err = vlan_changelink(dev, tb, data);
+	err = vlan_changelink(dev, tb, data, extack);
 	if (err < 0)
 		return err;
 
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index 39c1fa104c8d..37e4ec2953b2 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
@@ -960,7 +960,8 @@ static const struct nla_policy br_policy[IFLA_BR_MAX + 1] = {
 };
 
 static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
-			 struct nlattr *data[])
+			 struct nlattr *data[],
+			 struct netlink_ext_ack *extack)
 {
 	struct net_bridge *br = netdev_priv(brdev);
 	int err;
@@ -1229,7 +1230,7 @@ static int br_dev_newlink(struct net *src_net, struct net_device *dev,
 	if (err)
 		return err;
 
-	err = br_changelink(dev, tb, data);
+	err = br_changelink(dev, tb, data, extack);
 	if (err)
 		unregister_netdevice(dev);
 	return err;
diff --git a/net/caif/chnl_net.c b/net/caif/chnl_net.c
index 3ad833cd042f..922ac1d605b3 100644
--- a/net/caif/chnl_net.c
+++ b/net/caif/chnl_net.c
@@ -485,7 +485,8 @@ static int ipcaif_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int ipcaif_changelink(struct net_device *dev, struct nlattr *tb[],
-			     struct nlattr *data[])
+			     struct nlattr *data[],
+			     struct netlink_ext_ack *extack)
 {
 	struct chnl_net *caifdev;
 	ASSERT_RTNL();
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 8b3faa00905f..bac81d1bb24d 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -2620,7 +2620,7 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
 				    !ops->changelink)
 					return -EOPNOTSUPP;
 
-				err = ops->changelink(dev, tb, data);
+				err = ops->changelink(dev, tb, data, extack);
 				if (err < 0)
 					return err;
 				status |= DO_SETLINK_NOTIFY;
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index 989f29f2f0d5..a63985c4bec7 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -980,7 +980,8 @@ static int ipgre_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int ipgre_changelink(struct net_device *dev, struct nlattr *tb[],
-			    struct nlattr *data[])
+			    struct nlattr *data[],
+			    struct netlink_ext_ack *extack)
 {
 	struct ip_tunnel *t = netdev_priv(dev);
 	struct ip_tunnel_parm p;
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
index d748c5017d3b..24acff67a4f2 100644
--- a/net/ipv4/ip_vti.c
+++ b/net/ipv4/ip_vti.c
@@ -514,7 +514,8 @@ static int vti_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int vti_changelink(struct net_device *dev, struct nlattr *tb[],
-			  struct nlattr *data[])
+			  struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	struct ip_tunnel *t = netdev_priv(dev);
 	__u32 fwmark = t->fwmark;
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
index 51132060397d..eb7fe7b0046f 100644
--- a/net/ipv4/ipip.c
+++ b/net/ipv4/ipip.c
@@ -489,7 +489,8 @@ static int ipip_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int ipip_changelink(struct net_device *dev, struct nlattr *tb[],
-			   struct nlattr *data[])
+			   struct nlattr *data[],
+			   struct netlink_ext_ack *extack)
 {
 	struct ip_tunnel *t = netdev_priv(dev);
 	struct ip_tunnel_parm p;
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
index f7c949d41fda..7232b28425f3 100644
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
@@ -1404,7 +1404,8 @@ static int ip6gre_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int ip6gre_changelink(struct net_device *dev, struct nlattr *tb[],
-			    struct nlattr *data[])
+			     struct nlattr *data[],
+			     struct netlink_ext_ack *extack)
 {
 	struct ip6_tnl *t, *nt = netdev_priv(dev);
 	struct net *net = nt->net;
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index ca12b2e33ae3..d9f60a173107 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -2006,7 +2006,8 @@ static int ip6_tnl_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int ip6_tnl_changelink(struct net_device *dev, struct nlattr *tb[],
-			      struct nlattr *data[])
+			      struct nlattr *data[],
+			      struct netlink_ext_ack *extack)
 {
 	struct ip6_tnl *t = netdev_priv(dev);
 	struct __ip6_tnl_parm p;
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
index 736a4f3f731d..2afdddb48e69 100644
--- a/net/ipv6/ip6_vti.c
+++ b/net/ipv6/ip6_vti.c
@@ -967,7 +967,8 @@ static void vti6_dellink(struct net_device *dev, struct list_head *head)
 }
 
 static int vti6_changelink(struct net_device *dev, struct nlattr *tb[],
-			   struct nlattr *data[])
+			   struct nlattr *data[],
+			   struct netlink_ext_ack *extack)
 {
 	struct ip6_tnl *t;
 	struct __ip6_tnl_parm p;
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index f7445fdb5e64..b8000429f78d 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -1574,7 +1574,8 @@ static int ipip6_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int ipip6_changelink(struct net_device *dev, struct nlattr *tb[],
-			  struct nlattr *data[])
+			    struct nlattr *data[],
+			    struct netlink_ext_ack *extack)
 {
 	struct ip_tunnel *t = netdev_priv(dev);
 	struct ip_tunnel_parm p;
-- 
2.13.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next v2 3/5] net: add netlink_ext_ack argument to rtnl_link_ops.validate
  2017-06-25 21:55 [PATCH net-next v2 0/5] net: add netlink_ext_ack support to rtnl_link_ops Matthias Schiffer
  2017-06-25 21:55 ` [PATCH net-next v2 1/5] net: add netlink_ext_ack argument to rtnl_link_ops.newlink Matthias Schiffer
  2017-06-25 21:56 ` [PATCH net-next v2 2/5] net: add netlink_ext_ack argument to rtnl_link_ops.changelink Matthias Schiffer
@ 2017-06-25 21:56 ` Matthias Schiffer
       [not found]   ` <51f1b1e0b81216ce08a2c846c7eac6fb58e9d667.1498425679.git.mschiffer-Nyw9WiXk/RKXhJHkyCwd5uTW4wlIGRCZ@public.gmane.org>
  2017-06-25 21:56 ` [PATCH net-next v2 4/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_changelink Matthias Schiffer
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 18+ messages in thread
From: Matthias Schiffer @ 2017-06-25 21:56 UTC (permalink / raw)
  To: dledford, sean.hefty, hal.rosenstock, j.vosburgh, vfalico, andy,
	wg, mkl, pablo, laforge, paulus, jiri, dsa, shm, davem, stephen,
	arvid.brodin, alex.aring, stefan, kuznet, jmorris, yoshfuji,
	kaber, steffen.klassert, herbert, johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

Add support for extended error reporting.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
---
 drivers/net/bonding/bond_netlink.c | 3 ++-
 drivers/net/can/dev.c              | 3 ++-
 drivers/net/dummy.c                | 3 ++-
 drivers/net/geneve.c               | 3 ++-
 drivers/net/gtp.c                  | 3 ++-
 drivers/net/ifb.c                  | 3 ++-
 drivers/net/ipvlan/ipvlan_main.c   | 3 ++-
 drivers/net/macsec.c               | 3 ++-
 drivers/net/macvlan.c              | 3 ++-
 drivers/net/nlmon.c                | 3 ++-
 drivers/net/ppp/ppp_generic.c      | 3 ++-
 drivers/net/team/team.c            | 3 ++-
 drivers/net/tun.c                  | 3 ++-
 drivers/net/veth.c                 | 5 +++--
 drivers/net/vrf.c                  | 3 ++-
 drivers/net/vxlan.c                | 3 ++-
 include/net/rtnetlink.h            | 3 ++-
 net/8021q/vlan_netlink.c           | 3 ++-
 net/bridge/br_netlink.c            | 4 +++-
 net/core/rtnetlink.c               | 2 +-
 net/ieee802154/6lowpan/core.c      | 3 ++-
 net/ipv4/ip_gre.c                  | 8 +++++---
 net/ipv4/ip_vti.c                  | 3 ++-
 net/ipv4/ipip.c                    | 3 ++-
 net/ipv6/ip6_gre.c                 | 8 +++++---
 net/ipv6/ip6_tunnel.c              | 3 ++-
 net/ipv6/ip6_vti.c                 | 3 ++-
 net/ipv6/sit.c                     | 3 ++-
 28 files changed, 63 insertions(+), 33 deletions(-)

diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
index cb803c026f1f..0a9d78de6138 100644
--- a/drivers/net/bonding/bond_netlink.c
+++ b/drivers/net/bonding/bond_netlink.c
@@ -118,7 +118,8 @@ static const struct nla_policy bond_slave_policy[IFLA_BOND_SLAVE_MAX + 1] = {
 	[IFLA_BOND_SLAVE_QUEUE_ID]	= { .type = NLA_U16 },
 };
 
-static int bond_validate(struct nlattr *tb[], struct nlattr *data[])
+static int bond_validate(struct nlattr *tb[], struct nlattr *data[],
+			 struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS]) {
 		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index 6d8191f2ad32..365a8cc62405 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -848,7 +848,8 @@ static const struct nla_policy can_policy[IFLA_CAN_MAX + 1] = {
 				= { .len = sizeof(struct can_bittiming_const) },
 };
 
-static int can_validate(struct nlattr *tb[], struct nlattr *data[])
+static int can_validate(struct nlattr *tb[], struct nlattr *data[],
+			struct netlink_ext_ack *extack)
 {
 	bool is_can_fd = false;
 
diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
index 9905b52fe293..d0c165d2086e 100644
--- a/drivers/net/dummy.c
+++ b/drivers/net/dummy.c
@@ -356,7 +356,8 @@ static void dummy_setup(struct net_device *dev)
 	dev->max_mtu = ETH_MAX_MTU;
 }
 
-static int dummy_validate(struct nlattr *tb[], struct nlattr *data[])
+static int dummy_validate(struct nlattr *tb[], struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS]) {
 		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index 0a72d914e1f9..eb77201cb718 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -1058,7 +1058,8 @@ static const struct nla_policy geneve_policy[IFLA_GENEVE_MAX + 1] = {
 	[IFLA_GENEVE_UDP_ZERO_CSUM6_RX]	= { .type = NLA_U8 },
 };
 
-static int geneve_validate(struct nlattr *tb[], struct nlattr *data[])
+static int geneve_validate(struct nlattr *tb[], struct nlattr *data[],
+			   struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS]) {
 		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
index 9cfe8a24c1fc..1542e837fdfa 100644
--- a/drivers/net/gtp.c
+++ b/drivers/net/gtp.c
@@ -698,7 +698,8 @@ static const struct nla_policy gtp_policy[IFLA_GTP_MAX + 1] = {
 	[IFLA_GTP_ROLE]			= { .type = NLA_U32 },
 };
 
-static int gtp_validate(struct nlattr *tb[], struct nlattr *data[])
+static int gtp_validate(struct nlattr *tb[], struct nlattr *data[],
+			struct netlink_ext_ack *extack)
 {
 	if (!data)
 		return -EINVAL;
diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
index 144ea5ae8ab4..8870bd2a2e8a 100644
--- a/drivers/net/ifb.c
+++ b/drivers/net/ifb.c
@@ -273,7 +273,8 @@ static int ifb_open(struct net_device *dev)
 	return 0;
 }
 
-static int ifb_validate(struct nlattr *tb[], struct nlattr *data[])
+static int ifb_validate(struct nlattr *tb[], struct nlattr *data[],
+			struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS]) {
 		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
index e7d54072d7b3..f37e3c1fd4e7 100644
--- a/drivers/net/ipvlan/ipvlan_main.c
+++ b/drivers/net/ipvlan/ipvlan_main.c
@@ -477,7 +477,8 @@ static size_t ipvlan_nl_getsize(const struct net_device *dev)
 		);
 }
 
-static int ipvlan_nl_validate(struct nlattr *tb[], struct nlattr *data[])
+static int ipvlan_nl_validate(struct nlattr *tb[], struct nlattr *data[],
+			      struct netlink_ext_ack *extack)
 {
 	if (data && data[IFLA_IPVLAN_MODE]) {
 		u16 mode = nla_get_u16(data[IFLA_IPVLAN_MODE]);
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index 38ba3d73ac15..5e1ab1160856 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -3287,7 +3287,8 @@ static int macsec_newlink(struct net *net, struct net_device *dev,
 	return err;
 }
 
-static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[])
+static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[],
+				struct netlink_ext_ack *extack)
 {
 	u64 csid = MACSEC_DEFAULT_CIPHER_ID;
 	u8 icv_len = DEFAULT_ICV_LEN;
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 3064416578a9..9ffff0362a11 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -1162,7 +1162,8 @@ static void macvlan_port_destroy(struct net_device *dev)
 	kfree(port);
 }
 
-static int macvlan_validate(struct nlattr *tb[], struct nlattr *data[])
+static int macvlan_validate(struct nlattr *tb[], struct nlattr *data[],
+			    struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS]) {
 		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
diff --git a/drivers/net/nlmon.c b/drivers/net/nlmon.c
index c4b3362da4a2..4b22955de191 100644
--- a/drivers/net/nlmon.c
+++ b/drivers/net/nlmon.c
@@ -127,7 +127,8 @@ static void nlmon_setup(struct net_device *dev)
 	dev->min_mtu = sizeof(struct nlmsghdr);
 }
 
-static int nlmon_validate(struct nlattr *tb[], struct nlattr *data[])
+static int nlmon_validate(struct nlattr *tb[], struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS])
 		return -EINVAL;
diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
index 8479c130fe2e..13028833bee3 100644
--- a/drivers/net/ppp/ppp_generic.c
+++ b/drivers/net/ppp/ppp_generic.c
@@ -1061,7 +1061,8 @@ static const struct nla_policy ppp_nl_policy[IFLA_PPP_MAX + 1] = {
 	[IFLA_PPP_DEV_FD]	= { .type = NLA_S32 },
 };
 
-static int ppp_nl_validate(struct nlattr *tb[], struct nlattr *data[])
+static int ppp_nl_validate(struct nlattr *tb[], struct nlattr *data[],
+			   struct netlink_ext_ack *extack)
 {
 	if (!data)
 		return -EINVAL;
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index bbe97bb7c9cc..464570409796 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -2110,7 +2110,8 @@ static int team_newlink(struct net *src_net, struct net_device *dev,
 	return register_netdevice(dev);
 }
 
-static int team_validate(struct nlattr *tb[], struct nlattr *data[])
+static int team_validate(struct nlattr *tb[], struct nlattr *data[],
+			 struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS]) {
 		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index ae49f4b99b67..3d4c24572ecd 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1580,7 +1580,8 @@ static void tun_setup(struct net_device *dev)
 /* Trivial set of netlink ops to allow deleting tun or tap
  * device with netlink.
  */
-static int tun_validate(struct nlattr *tb[], struct nlattr *data[])
+static int tun_validate(struct nlattr *tb[], struct nlattr *data[],
+			struct netlink_ext_ack *extack)
 {
 	return -EINVAL;
 }
diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index 3db907cb7d07..b33553b1e19c 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -329,7 +329,8 @@ static void veth_setup(struct net_device *dev)
  * netlink interface
  */
 
-static int veth_validate(struct nlattr *tb[], struct nlattr *data[])
+static int veth_validate(struct nlattr *tb[], struct nlattr *data[],
+			 struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS]) {
 		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
@@ -374,7 +375,7 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
 		if (err < 0)
 			return err;
 
-		err = veth_validate(peer_tb, NULL);
+		err = veth_validate(peer_tb, NULL, extack);
 		if (err < 0)
 			return err;
 
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
index 762f4d033e1b..f4d0054981c6 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
@@ -1372,7 +1372,8 @@ static void vrf_setup(struct net_device *dev)
 	dev->priv_flags |= IFF_NO_QUEUE;
 }
 
-static int vrf_validate(struct nlattr *tb[], struct nlattr *data[])
+static int vrf_validate(struct nlattr *tb[], struct nlattr *data[],
+			struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS]) {
 		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 60c40349e73e..0dafd8e6c665 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -2711,7 +2711,8 @@ static const struct nla_policy vxlan_policy[IFLA_VXLAN_MAX + 1] = {
 	[IFLA_VXLAN_REMCSUM_NOPARTIAL]	= { .type = NLA_FLAG },
 };
 
-static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[])
+static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS]) {
 		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h
index f7d0320f75b0..11fe0ad60e43 100644
--- a/include/net/rtnetlink.h
+++ b/include/net/rtnetlink.h
@@ -63,7 +63,8 @@ struct rtnl_link_ops {
 	int			maxtype;
 	const struct nla_policy	*policy;
 	int			(*validate)(struct nlattr *tb[],
-					    struct nlattr *data[]);
+					    struct nlattr *data[],
+					    struct netlink_ext_ack *extack);
 
 	int			(*newlink)(struct net *src_net,
 					   struct net_device *dev,
diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c
index f08b5e192e45..5e831de3103e 100644
--- a/net/8021q/vlan_netlink.c
+++ b/net/8021q/vlan_netlink.c
@@ -39,7 +39,8 @@ static inline int vlan_validate_qos_map(struct nlattr *attr)
 				   NULL);
 }
 
-static int vlan_validate(struct nlattr *tb[], struct nlattr *data[])
+static int vlan_validate(struct nlattr *tb[], struct nlattr *data[],
+			 struct netlink_ext_ack *extack)
 {
 	struct ifla_vlan_flags *flags;
 	u16 id;
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index 37e4ec2953b2..9af177ca4d31 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
@@ -858,7 +858,9 @@ int br_dellink(struct net_device *dev, struct nlmsghdr *nlh, u16 flags)
 
 	return err;
 }
-static int br_validate(struct nlattr *tb[], struct nlattr *data[])
+
+static int br_validate(struct nlattr *tb[], struct nlattr *data[],
+		       struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS]) {
 		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index bac81d1bb24d..7136588e65e9 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -2582,7 +2582,7 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
 				data = attr;
 			}
 			if (ops->validate) {
-				err = ops->validate(tb, data);
+				err = ops->validate(tb, data, extack);
 				if (err < 0)
 					return err;
 			}
diff --git a/net/ieee802154/6lowpan/core.c b/net/ieee802154/6lowpan/core.c
index 1a4c585f3950..de2661cd0328 100644
--- a/net/ieee802154/6lowpan/core.c
+++ b/net/ieee802154/6lowpan/core.c
@@ -111,7 +111,8 @@ static void lowpan_setup(struct net_device *ldev)
 	ldev->features		|= NETIF_F_NETNS_LOCAL;
 }
 
-static int lowpan_validate(struct nlattr *tb[], struct nlattr *data[])
+static int lowpan_validate(struct nlattr *tb[], struct nlattr *data[],
+			   struct netlink_ext_ack *extack)
 {
 	if (tb[IFLA_ADDRESS]) {
 		if (nla_len(tb[IFLA_ADDRESS]) != IEEE802154_ADDR_LEN)
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index a63985c4bec7..7a7829e839c2 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -779,7 +779,8 @@ static struct pernet_operations ipgre_net_ops = {
 	.size = sizeof(struct ip_tunnel_net),
 };
 
-static int ipgre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])
+static int ipgre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[],
+				 struct netlink_ext_ack *extack)
 {
 	__be16 flags;
 
@@ -802,7 +803,8 @@ static int ipgre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])
 	return 0;
 }
 
-static int ipgre_tap_validate(struct nlattr *tb[], struct nlattr *data[])
+static int ipgre_tap_validate(struct nlattr *tb[], struct nlattr *data[],
+			      struct netlink_ext_ack *extack)
 {
 	__be32 daddr;
 
@@ -823,7 +825,7 @@ static int ipgre_tap_validate(struct nlattr *tb[], struct nlattr *data[])
 	}
 
 out:
-	return ipgre_tunnel_validate(tb, data);
+	return ipgre_tunnel_validate(tb, data, extack);
 }
 
 static int ipgre_netlink_parms(struct net_device *dev,
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
index 24acff67a4f2..0192c255e508 100644
--- a/net/ipv4/ip_vti.c
+++ b/net/ipv4/ip_vti.c
@@ -465,7 +465,8 @@ static struct pernet_operations vti_net_ops = {
 	.size = sizeof(struct ip_tunnel_net),
 };
 
-static int vti_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])
+static int vti_tunnel_validate(struct nlattr *tb[], struct nlattr *data[],
+			       struct netlink_ext_ack *extack)
 {
 	return 0;
 }
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
index eb7fe7b0046f..fb1ad22b5e29 100644
--- a/net/ipv4/ipip.c
+++ b/net/ipv4/ipip.c
@@ -375,7 +375,8 @@ static int ipip_tunnel_init(struct net_device *dev)
 	return ip_tunnel_init(dev);
 }
 
-static int ipip_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])
+static int ipip_tunnel_validate(struct nlattr *tb[], struct nlattr *data[],
+				struct netlink_ext_ack *extack)
 {
 	u8 proto;
 
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
index 7232b28425f3..67ff2aaf5dcb 100644
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
@@ -1170,7 +1170,8 @@ static struct pernet_operations ip6gre_net_ops = {
 	.size = sizeof(struct ip6gre_net),
 };
 
-static int ip6gre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])
+static int ip6gre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[],
+				  struct netlink_ext_ack *extack)
 {
 	__be16 flags;
 
@@ -1188,7 +1189,8 @@ static int ip6gre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])
 	return 0;
 }
 
-static int ip6gre_tap_validate(struct nlattr *tb[], struct nlattr *data[])
+static int ip6gre_tap_validate(struct nlattr *tb[], struct nlattr *data[],
+			       struct netlink_ext_ack *extack)
 {
 	struct in6_addr daddr;
 
@@ -1209,7 +1211,7 @@ static int ip6gre_tap_validate(struct nlattr *tb[], struct nlattr *data[])
 	}
 
 out:
-	return ip6gre_tunnel_validate(tb, data);
+	return ip6gre_tunnel_validate(tb, data, extack);
 }
 
 
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index d9f60a173107..3a0ba2ae4b0f 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -1885,7 +1885,8 @@ static int __net_init ip6_fb_tnl_dev_init(struct net_device *dev)
 	return 0;
 }
 
-static int ip6_tnl_validate(struct nlattr *tb[], struct nlattr *data[])
+static int ip6_tnl_validate(struct nlattr *tb[], struct nlattr *data[],
+			    struct netlink_ext_ack *extack)
 {
 	u8 proto;
 
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
index 2afdddb48e69..486c2305f53c 100644
--- a/net/ipv6/ip6_vti.c
+++ b/net/ipv6/ip6_vti.c
@@ -907,7 +907,8 @@ static int __net_init vti6_fb_tnl_dev_init(struct net_device *dev)
 	return 0;
 }
 
-static int vti6_validate(struct nlattr *tb[], struct nlattr *data[])
+static int vti6_validate(struct nlattr *tb[], struct nlattr *data[],
+			 struct netlink_ext_ack *extack)
 {
 	return 0;
 }
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index b8000429f78d..e9958b1398cb 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -1406,7 +1406,8 @@ static void __net_init ipip6_fb_tunnel_init(struct net_device *dev)
 	rcu_assign_pointer(sitn->tunnels_wc[0], tunnel);
 }
 
-static int ipip6_validate(struct nlattr *tb[], struct nlattr *data[])
+static int ipip6_validate(struct nlattr *tb[], struct nlattr *data[],
+			  struct netlink_ext_ack *extack)
 {
 	u8 proto;
 
-- 
2.13.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next v2 4/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_changelink
  2017-06-25 21:55 [PATCH net-next v2 0/5] net: add netlink_ext_ack support to rtnl_link_ops Matthias Schiffer
                   ` (2 preceding siblings ...)
  2017-06-25 21:56 ` [PATCH net-next v2 3/5] net: add netlink_ext_ack argument to rtnl_link_ops.validate Matthias Schiffer
@ 2017-06-25 21:56 ` Matthias Schiffer
  2017-06-26  4:04   ` David Ahern
  2017-06-25 21:56 ` [PATCH net-next v2 5/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_validate Matthias Schiffer
  2017-06-27  3:13 ` [PATCH net-next v2 0/5] net: add netlink_ext_ack support to rtnl_link_ops David Miller
  5 siblings, 1 reply; 18+ messages in thread
From: Matthias Schiffer @ 2017-06-25 21:56 UTC (permalink / raw)
  To: dledford, sean.hefty, hal.rosenstock, j.vosburgh, vfalico, andy,
	wg, mkl, pablo, laforge, paulus, jiri, dsa, shm, davem, stephen,
	arvid.brodin, alex.aring, stefan, kuznet, jmorris, yoshfuji,
	kaber, steffen.klassert, herbert, johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

Add support for extended error reporting.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
---
 drivers/net/bonding/bond_netlink.c | 3 ++-
 include/net/rtnetlink.h            | 3 ++-
 net/bridge/br_netlink.c            | 3 ++-
 net/core/rtnetlink.c               | 3 ++-
 4 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
index 0a9d78de6138..a1b33aa6054a 100644
--- a/drivers/net/bonding/bond_netlink.c
+++ b/drivers/net/bonding/bond_netlink.c
@@ -132,7 +132,8 @@ static int bond_validate(struct nlattr *tb[], struct nlattr *data[],
 
 static int bond_slave_changelink(struct net_device *bond_dev,
 				 struct net_device *slave_dev,
-				 struct nlattr *tb[], struct nlattr *data[])
+				 struct nlattr *tb[], struct nlattr *data[],
+				 struct netlink_ext_ack *extack)
 {
 	struct bonding *bond = netdev_priv(bond_dev);
 	struct bond_opt_value newval;
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h
index 11fe0ad60e43..baf99e173dca 100644
--- a/include/net/rtnetlink.h
+++ b/include/net/rtnetlink.h
@@ -95,7 +95,8 @@ struct rtnl_link_ops {
 	int			(*slave_changelink)(struct net_device *dev,
 						    struct net_device *slave_dev,
 						    struct nlattr *tb[],
-						    struct nlattr *data[]);
+						    struct nlattr *data[],
+						    struct netlink_ext_ack *extack);
 	size_t			(*get_slave_size)(const struct net_device *dev,
 						  const struct net_device *slave_dev);
 	int			(*fill_slave_info)(struct sk_buff *skb,
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index 9af177ca4d31..3bc890716c89 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
@@ -897,7 +897,8 @@ static int br_validate(struct nlattr *tb[], struct nlattr *data[],
 static int br_port_slave_changelink(struct net_device *brdev,
 				    struct net_device *dev,
 				    struct nlattr *tb[],
-				    struct nlattr *data[])
+				    struct nlattr *data[],
+				    struct netlink_ext_ack *extack)
 {
 	struct net_bridge *br = netdev_priv(brdev);
 	int ret;
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 7136588e65e9..658a48959fc4 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -2631,7 +2631,8 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
 					return -EOPNOTSUPP;
 
 				err = m_ops->slave_changelink(master_dev, dev,
-							      tb, slave_data);
+							      tb, slave_data,
+							      extack);
 				if (err < 0)
 					return err;
 				status |= DO_SETLINK_NOTIFY;
-- 
2.13.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next v2 5/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_validate
  2017-06-25 21:55 [PATCH net-next v2 0/5] net: add netlink_ext_ack support to rtnl_link_ops Matthias Schiffer
                   ` (3 preceding siblings ...)
  2017-06-25 21:56 ` [PATCH net-next v2 4/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_changelink Matthias Schiffer
@ 2017-06-25 21:56 ` Matthias Schiffer
  2017-06-26  4:05   ` David Ahern
  2017-06-27  3:13 ` [PATCH net-next v2 0/5] net: add netlink_ext_ack support to rtnl_link_ops David Miller
  5 siblings, 1 reply; 18+ messages in thread
From: Matthias Schiffer @ 2017-06-25 21:56 UTC (permalink / raw)
  To: dledford, sean.hefty, hal.rosenstock, j.vosburgh, vfalico, andy,
	wg, mkl, pablo, laforge, paulus, jiri, dsa, shm, davem, stephen,
	arvid.brodin, alex.aring, stefan, kuznet, jmorris, yoshfuji,
	kaber, steffen.klassert, herbert, johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

Add support for extended error reporting.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
---
 include/net/rtnetlink.h | 3 ++-
 net/core/rtnetlink.c    | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h
index baf99e173dca..abe6b733d473 100644
--- a/include/net/rtnetlink.h
+++ b/include/net/rtnetlink.h
@@ -91,7 +91,8 @@ struct rtnl_link_ops {
 	int			slave_maxtype;
 	const struct nla_policy	*slave_policy;
 	int			(*slave_validate)(struct nlattr *tb[],
-						  struct nlattr *data[]);
+						  struct nlattr *data[],
+						  struct netlink_ext_ack *extack);
 	int			(*slave_changelink)(struct net_device *dev,
 						    struct net_device *slave_dev,
 						    struct nlattr *tb[],
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 658a48959fc4..ed51de525a88 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -2601,7 +2601,8 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
 				slave_data = slave_attr;
 			}
 			if (m_ops->slave_validate) {
-				err = m_ops->slave_validate(tb, slave_data);
+				err = m_ops->slave_validate(tb, slave_data,
+							    extack);
 				if (err < 0)
 					return err;
 			}
-- 
2.13.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next v2 1/5] net: add netlink_ext_ack argument to rtnl_link_ops.newlink
  2017-06-25 21:55 ` [PATCH net-next v2 1/5] net: add netlink_ext_ack argument to rtnl_link_ops.newlink Matthias Schiffer
@ 2017-06-26  4:02   ` David Ahern
  0 siblings, 0 replies; 18+ messages in thread
From: David Ahern @ 2017-06-26  4:02 UTC (permalink / raw)
  To: Matthias Schiffer, dledford, sean.hefty, hal.rosenstock,
	j.vosburgh, vfalico, andy, wg, mkl, pablo, laforge, paulus, jiri,
	dsa, shm, davem, stephen, arvid.brodin, alex.aring, stefan,
	kuznet, jmorris, yoshfuji, kaber, steffen.klassert, herbert,
	johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

On 6/25/17 3:55 PM, Matthias Schiffer wrote:
> Add support for extended error reporting.
> 
> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
> ---

Acked-by: David Ahern <dsahern@gmail.com>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next v2 2/5] net: add netlink_ext_ack argument to rtnl_link_ops.changelink
  2017-06-25 21:56 ` [PATCH net-next v2 2/5] net: add netlink_ext_ack argument to rtnl_link_ops.changelink Matthias Schiffer
@ 2017-06-26  4:03   ` David Ahern
  0 siblings, 0 replies; 18+ messages in thread
From: David Ahern @ 2017-06-26  4:03 UTC (permalink / raw)
  To: Matthias Schiffer, dledford, sean.hefty, hal.rosenstock,
	j.vosburgh, vfalico, andy, wg, mkl, pablo, laforge, paulus, jiri,
	dsa, shm, davem, stephen, arvid.brodin, alex.aring, stefan,
	kuznet, jmorris, yoshfuji, kaber, steffen.klassert, herbert,
	johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

On 6/25/17 3:56 PM, Matthias Schiffer wrote:
> Add support for extended error reporting.
> 
> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>

Acked-by: David Ahern <dsahern@gmail.com>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next v2 3/5] net: add netlink_ext_ack argument to rtnl_link_ops.validate
       [not found]   ` <51f1b1e0b81216ce08a2c846c7eac6fb58e9d667.1498425679.git.mschiffer-Nyw9WiXk/RKXhJHkyCwd5uTW4wlIGRCZ@public.gmane.org>
@ 2017-06-26  4:04     ` David Ahern
  0 siblings, 0 replies; 18+ messages in thread
From: David Ahern @ 2017-06-26  4:04 UTC (permalink / raw)
  To: Matthias Schiffer, dledford-H+wXaHxf7aLQT0dZR+AlfA,
	sean.hefty-ral2JQCrhuEAvxtiuMwx3w,
	hal.rosenstock-Re5JQEeQqe8AvxtiuMwx3w,
	j.vosburgh-Re5JQEeQqe8AvxtiuMwx3w,
	vfalico-Re5JQEeQqe8AvxtiuMwx3w, andy-QlMahl40kYEqcZcGjlUOXw,
	wg-5Yr1BZd7O62+XT7JhA+gdA, mkl-bIcnvbaLZ9MEGnE8C9+IrQ,
	pablo-Cap9r6Oaw4JrovVCs/uTlw, laforge-TgoAw6mPHtdg9hUCZPvPmw,
	paulus-eUNUBHrolfbYtjvyW6yDsg, jiri-rHqAuBHg3fBzbRFIqnYvSA,
	dsa-qUQiAmfTcIp+XZJcv9eMoEEOCMrvLtNR,
	shm-qUQiAmfTcIp+XZJcv9eMoEEOCMrvLtNR,
	davem-fT/PcQaiUtIeIZ0/mPfg9Q,
	stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ,
	arvid.brodin-SVm98a2vdck, alex.aring-Re5JQEeQqe8AvxtiuMwx3w,
	stefan-JPH+aEBZ4P+UEJcrhfAQsw, kuznet-v/Mj1YrvjDBInbfyfbPRSQ,
	jmorris-gx6/JNMH7DfYtjvyW6yDsg, yoshfuji-VfPWfsRibaP+Ru+s062T9g,
	kaber-dcUjhNyLwpNeoWH0uzbU5w,
	steffen.klassert-opNxpl+3fjRBDgjK7y7TUQ,
	herbert-lOAM2aK0SrRLBo1qDEOMRrpzq4S04n8Q,
	johannes-cdvu00un1VgdHxzADdlk8Q
  Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA, linux-can-u79uwXL29TY76Z2rM5mHXA,
	linux-ppp-u79uwXL29TY76Z2rM5mHXA,
	linux-wpan-u79uwXL29TY76Z2rM5mHXA

On 6/25/17 3:56 PM, Matthias Schiffer wrote:
> Add support for extended error reporting.
> 
> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
> ---

Acked-by: David Ahern <dsahern@gmail.com>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next v2 4/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_changelink
  2017-06-25 21:56 ` [PATCH net-next v2 4/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_changelink Matthias Schiffer
@ 2017-06-26  4:04   ` David Ahern
       [not found]     ` <b097a69e-4449-b124-c39e-4dbdbae7c218-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 18+ messages in thread
From: David Ahern @ 2017-06-26  4:04 UTC (permalink / raw)
  To: Matthias Schiffer, dledford, sean.hefty, hal.rosenstock,
	j.vosburgh, vfalico, andy, wg, mkl, pablo, laforge, paulus, jiri,
	dsa, shm, davem, stephen, arvid.brodin, alex.aring, stefan,
	kuznet, jmorris, yoshfuji, kaber, steffen.klassert, herbert,
	johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

On 6/25/17 3:56 PM, Matthias Schiffer wrote:
> Add support for extended error reporting.
> 
> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
> ---


Acked-by: David Ahern <dsahern@gmail.com>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next v2 5/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_validate
  2017-06-25 21:56 ` [PATCH net-next v2 5/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_validate Matthias Schiffer
@ 2017-06-26  4:05   ` David Ahern
  2017-06-26  4:08     ` David Ahern
  0 siblings, 1 reply; 18+ messages in thread
From: David Ahern @ 2017-06-26  4:05 UTC (permalink / raw)
  To: Matthias Schiffer, dledford, sean.hefty, hal.rosenstock,
	j.vosburgh, vfalico, andy, wg, mkl, pablo, laforge, paulus, jiri,
	dsa, shm, davem, stephen, arvid.brodin, alex.aring, stefan,
	kuznet, jmorris, yoshfuji, kaber, steffen.klassert, herbert,
	johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

On 6/25/17 3:56 PM, Matthias Schiffer wrote:
> Add support for extended error reporting.
> 
> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
> ---

Acked-by: David Ahern <dsahern@gmail.com>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next v2 4/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_changelink
       [not found]     ` <b097a69e-4449-b124-c39e-4dbdbae7c218-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2017-06-26  4:08       ` David Ahern
  2017-06-26  8:43         ` Matthias Schiffer
  0 siblings, 1 reply; 18+ messages in thread
From: David Ahern @ 2017-06-26  4:08 UTC (permalink / raw)
  To: Matthias Schiffer, dledford-H+wXaHxf7aLQT0dZR+AlfA,
	sean.hefty-ral2JQCrhuEAvxtiuMwx3w,
	hal.rosenstock-Re5JQEeQqe8AvxtiuMwx3w,
	j.vosburgh-Re5JQEeQqe8AvxtiuMwx3w,
	vfalico-Re5JQEeQqe8AvxtiuMwx3w, andy-QlMahl40kYEqcZcGjlUOXw,
	wg-5Yr1BZd7O62+XT7JhA+gdA, mkl-bIcnvbaLZ9MEGnE8C9+IrQ,
	pablo-Cap9r6Oaw4JrovVCs/uTlw, laforge-TgoAw6mPHtdg9hUCZPvPmw,
	paulus-eUNUBHrolfbYtjvyW6yDsg, jiri-rHqAuBHg3fBzbRFIqnYvSA,
	dsa-qUQiAmfTcIp+XZJcv9eMoEEOCMrvLtNR,
	shm-qUQiAmfTcIp+XZJcv9eMoEEOCMrvLtNR,
	davem-fT/PcQaiUtIeIZ0/mPfg9Q,
	stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ,
	arvid.brodin-SVm98a2vdck, alex.aring-Re5JQEeQqe8AvxtiuMwx3w,
	stefan-JPH+aEBZ4P+UEJcrhfAQsw, kuznet-v/Mj1YrvjDBInbfyfbPRSQ,
	jmorris-gx6/JNMH7DfYtjvyW6yDsg, yoshfuji-VfPWfsRibaP+Ru+s062T9g,
	kaber-dcUjhNyLwpNeoWH0uzbU5w,
	steffen.klassert-opNxpl+3fjRBDgjK7y7TUQ,
	herbert-lOAM2aK0SrRLBo1qDEOMRrpzq4S04n8Q,
	johannes-cdvu00un1VgdHxzADdlk8Q
  Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA, linux-can-u79uwXL29TY76Z2rM5mHXA,
	linux-ppp-u79uwXL29TY76Z2rM5mHXA,
	linux-wpan-u79uwXL29TY76Z2rM5mHXA

On 6/25/17 10:04 PM, David Ahern wrote:
> On 6/25/17 3:56 PM, Matthias Schiffer wrote:
>> Add support for extended error reporting.
>>
>> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
>> ---
> 
> 
> Acked-by: David Ahern <dsahern@gmail.com>
> 

Actually, you are missing the chagne to br_port_slave_changelink.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next v2 5/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_validate
  2017-06-26  4:05   ` David Ahern
@ 2017-06-26  4:08     ` David Ahern
  0 siblings, 0 replies; 18+ messages in thread
From: David Ahern @ 2017-06-26  4:08 UTC (permalink / raw)
  To: Matthias Schiffer, dledford, sean.hefty, hal.rosenstock,
	j.vosburgh, vfalico, andy, wg, mkl, pablo, laforge, paulus, jiri,
	dsa, shm, davem, stephen, arvid.brodin, alex.aring, stefan,
	kuznet, jmorris, yoshfuji, kaber, steffen.klassert, herbert,
	johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

On 6/25/17 10:05 PM, David Ahern wrote:
> On 6/25/17 3:56 PM, Matthias Schiffer wrote:
>> Add support for extended error reporting.
>>
>> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
>> ---
> 
> Acked-by: David Ahern <dsahern@gmail.com>
> 

And slave_validate is not used; it should be removed.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next v2 4/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_changelink
  2017-06-26  4:08       ` David Ahern
@ 2017-06-26  8:43         ` Matthias Schiffer
  2017-06-26 13:33           ` David Ahern
  0 siblings, 1 reply; 18+ messages in thread
From: Matthias Schiffer @ 2017-06-26  8:43 UTC (permalink / raw)
  To: David Ahern, dledford, sean.hefty, hal.rosenstock, j.vosburgh,
	vfalico, andy, wg, mkl, pablo, laforge, paulus, jiri, dsa, shm,
	davem, stephen, arvid.brodin, alex.aring, stefan, kuznet,
	jmorris, yoshfuji, kaber, steffen.klassert, herbert, johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan


[-- Attachment #1.1: Type: text/plain, Size: 498 bytes --]

On 06/26/2017 06:08 AM, David Ahern wrote:
> On 6/25/17 10:04 PM, David Ahern wrote:
>> On 6/25/17 3:56 PM, Matthias Schiffer wrote:
>>> Add support for extended error reporting.
>>>
>>> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
>>> ---
>>
>>
>> Acked-by: David Ahern <dsahern@gmail.com>
>>
> 
> Actually, you are missing the chagne to br_port_slave_changelink.
> 

I'm confused. I am changing br_port_slave_changelink? All my patches are
compile-tested.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next v2 4/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_changelink
  2017-06-26  8:43         ` Matthias Schiffer
@ 2017-06-26 13:33           ` David Ahern
  2017-06-26 13:45             ` Matthias Schiffer
  0 siblings, 1 reply; 18+ messages in thread
From: David Ahern @ 2017-06-26 13:33 UTC (permalink / raw)
  To: Matthias Schiffer, dledford, sean.hefty, hal.rosenstock,
	j.vosburgh, vfalico, andy, wg, mkl, pablo, laforge, paulus, jiri,
	dsa, shm, davem, stephen, arvid.brodin, alex.aring, stefan,
	kuznet, jmorris, yoshfuji, kaber, steffen.klassert, herbert,
	johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

On 6/26/17 2:43 AM, Matthias Schiffer wrote:
> On 06/26/2017 06:08 AM, David Ahern wrote:
>> On 6/25/17 10:04 PM, David Ahern wrote:
>>> On 6/25/17 3:56 PM, Matthias Schiffer wrote:
>>>> Add support for extended error reporting.
>>>>
>>>> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
>>>> ---
>>>
>>>
>>> Acked-by: David Ahern <dsahern@gmail.com>
>>>
>>
>> Actually, you are missing the chagne to br_port_slave_changelink.
>>
> 
> I'm confused. I am changing br_port_slave_changelink? All my patches are
> compile-tested.
> 

You are changing the signature of slave_changelink, no?

net/bridge/br_netlink.c:
        .slave_changelink       = br_port_slave_changelink,

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next v2 4/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_changelink
  2017-06-26 13:33           ` David Ahern
@ 2017-06-26 13:45             ` Matthias Schiffer
  2017-06-26 13:47               ` David Ahern
  0 siblings, 1 reply; 18+ messages in thread
From: Matthias Schiffer @ 2017-06-26 13:45 UTC (permalink / raw)
  To: David Ahern, dledford, sean.hefty, hal.rosenstock, j.vosburgh,
	vfalico, andy, wg, mkl, pablo, laforge, paulus, jiri, dsa, shm,
	davem, stephen, arvid.brodin, alex.aring, stefan, kuznet,
	jmorris, yoshfuji, kaber, steffen.klassert, herbert, johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan


[-- Attachment #1.1: Type: text/plain, Size: 966 bytes --]

On 06/26/2017 03:33 PM, David Ahern wrote:
> On 6/26/17 2:43 AM, Matthias Schiffer wrote:
>> On 06/26/2017 06:08 AM, David Ahern wrote:
>>> On 6/25/17 10:04 PM, David Ahern wrote:
>>>> On 6/25/17 3:56 PM, Matthias Schiffer wrote:
>>>>> Add support for extended error reporting.
>>>>>
>>>>> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
>>>>> ---
>>>>
>>>>
>>>> Acked-by: David Ahern <dsahern@gmail.com>
>>>>
>>>
>>> Actually, you are missing the chagne to br_port_slave_changelink.
>>>
>>
>> I'm confused. I am changing br_port_slave_changelink? All my patches are
>> compile-tested.
>>
> 
> You are changing the signature of slave_changelink, no?
> 
> net/bridge/br_netlink.c:
>         .slave_changelink       = br_port_slave_changelink,
> 


Please read my patch again, I *am* changing br_port_slave_changelink to
match the new signature (this is the net/bridge/br_netlink.c change
appearing in the diffstat).


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next v2 4/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_changelink
  2017-06-26 13:45             ` Matthias Schiffer
@ 2017-06-26 13:47               ` David Ahern
  0 siblings, 0 replies; 18+ messages in thread
From: David Ahern @ 2017-06-26 13:47 UTC (permalink / raw)
  To: Matthias Schiffer, dledford, sean.hefty, hal.rosenstock,
	j.vosburgh, vfalico, andy, wg, mkl, pablo, laforge, paulus, jiri,
	dsa, shm, davem, stephen, arvid.brodin, alex.aring, stefan,
	kuznet, jmorris, yoshfuji, kaber, steffen.klassert, herbert,
	johannes
  Cc: linux-rdma, linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

On 6/26/17 7:45 AM, Matthias Schiffer wrote:
> 
> Please read my patch again, I *am* changing br_port_slave_changelink to
> match the new signature (this is the net/bridge/br_netlink.c change
> appearing in the diffstat).
> 

Hmmm.... right you are. sorry for the confusion.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next v2 0/5] net: add netlink_ext_ack support to rtnl_link_ops
  2017-06-25 21:55 [PATCH net-next v2 0/5] net: add netlink_ext_ack support to rtnl_link_ops Matthias Schiffer
                   ` (4 preceding siblings ...)
  2017-06-25 21:56 ` [PATCH net-next v2 5/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_validate Matthias Schiffer
@ 2017-06-27  3:13 ` David Miller
  5 siblings, 0 replies; 18+ messages in thread
From: David Miller @ 2017-06-27  3:13 UTC (permalink / raw)
  To: mschiffer
  Cc: dledford, sean.hefty, hal.rosenstock, j.vosburgh, vfalico, andy,
	wg, mkl, pablo, laforge, paulus, jiri, dsa, shm, stephen,
	arvid.brodin, alex.aring, stefan, kuznet, jmorris, yoshfuji,
	kaber, steffen.klassert, herbert, johannes, linux-rdma,
	linux-kernel, netdev, linux-can, linux-ppp, linux-wpan

From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Sun, 25 Jun 2017 23:55:58 +0200

> Same changes as http://patchwork.ozlabs.org/patch/780351/ , split into
> separate patches for each rtnl_link_ops field as requested.

Series applied, thank you.

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2017-06-27  3:13 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-25 21:55 [PATCH net-next v2 0/5] net: add netlink_ext_ack support to rtnl_link_ops Matthias Schiffer
2017-06-25 21:55 ` [PATCH net-next v2 1/5] net: add netlink_ext_ack argument to rtnl_link_ops.newlink Matthias Schiffer
2017-06-26  4:02   ` David Ahern
2017-06-25 21:56 ` [PATCH net-next v2 2/5] net: add netlink_ext_ack argument to rtnl_link_ops.changelink Matthias Schiffer
2017-06-26  4:03   ` David Ahern
2017-06-25 21:56 ` [PATCH net-next v2 3/5] net: add netlink_ext_ack argument to rtnl_link_ops.validate Matthias Schiffer
     [not found]   ` <51f1b1e0b81216ce08a2c846c7eac6fb58e9d667.1498425679.git.mschiffer-Nyw9WiXk/RKXhJHkyCwd5uTW4wlIGRCZ@public.gmane.org>
2017-06-26  4:04     ` David Ahern
2017-06-25 21:56 ` [PATCH net-next v2 4/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_changelink Matthias Schiffer
2017-06-26  4:04   ` David Ahern
     [not found]     ` <b097a69e-4449-b124-c39e-4dbdbae7c218-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-06-26  4:08       ` David Ahern
2017-06-26  8:43         ` Matthias Schiffer
2017-06-26 13:33           ` David Ahern
2017-06-26 13:45             ` Matthias Schiffer
2017-06-26 13:47               ` David Ahern
2017-06-25 21:56 ` [PATCH net-next v2 5/5] net: add netlink_ext_ack argument to rtnl_link_ops.slave_validate Matthias Schiffer
2017-06-26  4:05   ` David Ahern
2017-06-26  4:08     ` David Ahern
2017-06-27  3:13 ` [PATCH net-next v2 0/5] net: add netlink_ext_ack support to rtnl_link_ops David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).