Inside this function mbuf_data_room_size is set to a default value if opaque_arg is null and it should be set to the value pointed by opaque_arg if not null. Current implementation is using not the value but with the pointer itself. I think this:
roomsz = (uint16_t)(uintptr_t)opaque_arg; should be something like this: roomsz = *(uint16_t *)opaque_arg;