[PATCH v12 11/12] net/tap: do not mark queue full as error

Ferruh Yigit ferruh.yigit at amd.com
Mon May 20 19:52:27 CEST 2024


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 <stephen at 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.



More information about the dev mailing list