Set final before issuing RMA write

To avoid the race in case another thread completes the RMA before we set
it after calling cci_rma().
Revise reserving rma buffers

If we are reusing a rma slot, the caller must set the rma->idx
accordingly. Within reserve_rma_buffer_locked(), check rma->idx. If -1,
search for an available slot. Else, simply update rma_buf->rmas[idx].
Use existing functions when receiving rma done

Don't reinvent the wheel. Set new->idx to the old rma->idx before
reserving.