On Thu, Aug 14, 2025 at 11:48:49AM +0200, Laurent Vivier wrote:
The packet pool was previously limited to handling packets contained within a single buffer.
This patch extends the packet pool to support iovec array, allowing a single logical packet to be composed of multiple iovec.
To accommodate this, the storage format within the pool is modified. For a multi-vector packet, a header entry is now stored first with iov_base = NULL and iov_len holding the number of subsequent vectors. The actual data vectors are then stored in the following pool slots.
The packet_add_do() and packet_get_do() functions are updated to manage this new format for storing and retrieving packets. The pool_full() check is also adjusted to ensure there is enough space for all vectors of a new packet before adding it.
Signed-off-by: Laurent Vivier
--- packet.c | 52 ++++++++++++++++++++++++++++++++++------------------ packet.h | 2 +- tap.c | 4 ++-- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/packet.c b/packet.c index 27693c55a138..c88e726c94a6 100644 --- a/packet.c +++ b/packet.c @@ -91,14 +91,15 @@ static int packet_check_range(const struct pool *p, const char *ptr, size_t len, return 0; } /** - * pool_full() - Is a packet pool full? + * pool_can_fit() - Is a new packet can fit in the pool?
"Can a new packet fit in the pool?"
* @p: Pointer to packet pool + * @data: check data can fit in the pool * - * Return: true if the pool is full, false if more packets can be added + * Return: true if the pool is full, false if data can be added
With the name changed, the sense needs to be inverted as well. Also s/data/@data/ to make it clear we're talking specifically about the parameter, not "data" in the broad sense.
*/ -bool pool_full(const struct pool *p) +bool pool_can_fit(const struct pool *p, const struct iov_tail *data) { - return p->count >= p->size; + return p->count + data->cnt + (data->cnt > 1) >= p->size;
Still an off-by-one here, see comments in the other thread. ..and this is still only valid if @data is already pruned. I really think a bunch of things would become a bit clearer if you add a change earlier in the series clarifying that iov_tails should never be passed around unpruned. -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson