The packet passed to qr_task_send() must stay valid until the write callback. Since the callback only deals with task itself, it makes no sense to have a separate pkt structure, outside of task, since there would be no indication of when it can be freed.
Always using the task->pktbuf makes this conceptually simpler and cleaner.