> @@ -300,6 +303,22 @@ int hv_ringbuffer_write(struct vmbus_channel *channel,
>                                                    kv_list[i].iov_len);
>       }
>  
> +     /*
> +      * Allocate the request ID after the data has been copied into the
> +      * ring buffer.  Once this request ID is allocated, the completion
> +      * path could find the data and free it.
> +      */
> +
> +     if (desc->flags == VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED) {
> +             rqst_id = vmbus_next_request_id(&channel->requestor, requestid);
> +             if (rqst_id == VMBUS_RQST_ERROR) {
> +                     pr_err("No request id available\n");
> +                     return -EAGAIN;

FYI, the lkp kernel test robot reported a missing call to
spin_unlock_irqrestore(&outring_info->ring_lock, flags) before the
above 'return': I'll address this in the next submission.

  Andrea

Reply via email to