{
int32_t j;
uint32_t extra_len = extra_buf ? extra_buf->size : 0;
- uint32_t size = *psize - extra_len;
+ uint32_t size = *psize;
buf_ptr_t *bufs;
bufs = from->bufs;
uint32_t e_len;
sg_comp_t *to = &list[i >> 2];
- if (!bufs[j].size)
- continue;
-
if (unlikely(from_offset)) {
if (from_offset >= bufs[j].size) {
from_offset -= bufs[j].size;
to->u.s.len[i % 4] = rte_cpu_to_be_16(e_len);
}
+ extra_len = RTE_MIN(extra_len, size);
/* Insert extra data ptr */
if (extra_len) {
i++;
to = &list[i >> 2];
to->u.s.len[i % 4] =
- rte_cpu_to_be_16(extra_buf->size);
+ rte_cpu_to_be_16(extra_len);
to->ptr[i % 4] =
rte_cpu_to_be_64(extra_buf->dma_addr);
-
- /* size already decremented by extra len */
+ size -= extra_len;
}
+ next_len = RTE_MIN(next_len, size);
/* insert the rest of the data */
if (next_len) {
i++;