]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
netpoll: Make netpoll_send_udp return status instead of void
authorMaksym Kutsevol <max@kutsevol.com>
Mon, 2 Dec 2024 19:55:07 +0000 (11:55 -0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 5 Dec 2024 03:15:38 +0000 (19:15 -0800)
netpoll_send_udp can return if send was successful.
It will allow client code to be aware of the send status.

Possible return values are the result of __netpoll_send_skb (cast to int)
and -ENOMEM. This doesn't cover the case when TX was not successful
instantaneously and was scheduled for later, __netpoll__send_skb returns
success in that case.

Signed-off-by: Maksym Kutsevol <max@kutsevol.com>
Link: https://patch.msgid.link/20241202-netcons-add-udp-send-fail-statistics-to-netconsole-v5-1-70e82239f922@kutsevol.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/linux/netpoll.h
net/core/netpoll.c

index b34301650c479077b0481e1463c6591e73994f6e..f91e50a76efd4b016381c632456397eea1ea877f 100644 (file)
@@ -57,7 +57,7 @@ static inline void netpoll_poll_disable(struct net_device *dev) { return; }
 static inline void netpoll_poll_enable(struct net_device *dev) { return; }
 #endif
 
-void netpoll_send_udp(struct netpoll *np, const char *msg, int len);
+int netpoll_send_udp(struct netpoll *np, const char *msg, int len);
 void netpoll_print_options(struct netpoll *np);
 int netpoll_parse_options(struct netpoll *np, char *opt);
 int __netpoll_setup(struct netpoll *np, struct net_device *ndev);
index 99e5aa9cc992f429eecf20aeadd04dc293b8f22b..6f2647b000b8fac8c02a52830f62a065f6959636 100644 (file)
@@ -390,7 +390,7 @@ netdev_tx_t netpoll_send_skb(struct netpoll *np, struct sk_buff *skb)
 }
 EXPORT_SYMBOL(netpoll_send_skb);
 
-void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
+int netpoll_send_udp(struct netpoll *np, const char *msg, int len)
 {
        int total_len, ip_len, udp_len;
        struct sk_buff *skb;
@@ -414,7 +414,7 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
        skb = find_skb(np, total_len + np->dev->needed_tailroom,
                       total_len - len);
        if (!skb)
-               return;
+               return -ENOMEM;
 
        skb_copy_to_linear_data(skb, msg, len);
        skb_put(skb, len);
@@ -490,7 +490,7 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
 
        skb->dev = np->dev;
 
-       netpoll_send_skb(np, skb);
+       return (int)netpoll_send_skb(np, skb);
 }
 EXPORT_SYMBOL(netpoll_send_udp);