A question about the design of `doca_buf`

I am unclear about the purpose of the head and head_len members in struct doca_buf. While the user can control the buffer size with data and data_len, it seems that head and head_len may be redundant. And I am curious as to why the user only needs to set the source buffer without setting a destination buffer. If head and head_len are used to control the range of doca_buf, and data and data_len control the data to be transferred, it is unclear to me why the user would not need to specify a destination buffer. And if I do set the destination buffer, the program might throw an error: “[DOCA] [ERR][DOCA DMA:1442]: CQ received for failed job: status=2, vendor error=104.”