We can't update the CQ head before consuming the CQEs, otherwise the device can reuse them. And devices must not discard completions when there is no completion queue entry, nvme does allow SQs and CQs to be smaller than the number of outstanding commands.