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