Sorry, just fixing my comment here:

So I think i spotted one issue, you might need override desc->len after the call to the reserve_and_fill function so that it's *not taken* from local_mbuf here.