On 5/2/2024 10:31 PM, Stephen Hemminger wrote:
> If tap device in kernel returns EAGAIN that means it is full.
> That is not an error.
> 
> Signed-off-by: Stephen Hemminger <step...@networkplumber.org>
> ---
>  drivers/net/tap/rte_eth_tap.c | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
> index 2484a82ccb..485bd35912 100644
> --- a/drivers/net/tap/rte_eth_tap.c
> +++ b/drivers/net/tap/rte_eth_tap.c
> @@ -542,7 +542,6 @@ tap_write_mbufs(struct tx_queue *txq, uint16_t num_mbufs,
>               struct rte_mbuf *seg = mbuf;
>               uint64_t l4_ol_flags;
>               int proto;
> -             int n;
>               int j;
>               int k; /* current index in iovecs for copying segments */
>  
> @@ -647,14 +646,18 @@ tap_write_mbufs(struct tx_queue *txq, uint16_t 
> num_mbufs,
>               }
>  
>               /* copy the tx frame data */
> -             n = writev(process_private->fds[txq->queue_id], iovecs, k);
> -             if (n <= 0)
> -                     return -1;
> +             if (unlikely(writev(process_private->fds[txq->queue_id], 
> iovecs, k) < 0)) {
> +                     TAP_LOG(DEBUG, "writev (qid=%u fd=%d) %s",
> +                             txq->queue_id, 
> process_private->fds[txq->queue_id],
> +                             strerror(errno));
>

Do we really want logging in datapath?

> +                     return (errno == EAGAIN) ? 0 : -1;
>

Nack.

Returning '0' will cause 'pmd_tx_burst()' to continue and increase
'num_tx', this will mislead as packet sent successfully.

We should have three return values from 'tap_write_mbufs()':
<0 -> Error, 'pmd_tx_burst()' should break, stats.errors updated.
 0 ->  'pmd_tx_burst()' should break, valid num_tx returned
>0 -> 'pmd_tx_burst()' work as it is.

> +             }
>  
>               (*num_packets)++;
>               (*num_tx_bytes) += rte_pktmbuf_pkt_len(mbuf);
>       }
> -     return 0;
> +
> +     return 1;
> 

Why '1', wouldn't it be better to return number of packets written
successfully.

Reply via email to