Yes, if multiple waiters call vhost_net_ubuf_put_and_wait() concurrently we are screwed. Furthermore, it was not the case before this patch. While it was explicitly mentioned in the commit message, now I changed my mind, because amount of vhost_net_ubuf_put_and_wait() users may change when this patch will be backported to older LTSes. In 6.6+ kernels there are only two put_and_wait() callers, both are ensuring that there is only one thread calling put_and_wait() at a time. I think its better to preserve thread-safety of vhost_net_ubuf_put_and_wait() and move reinit_completion() call to vhost_net_flush(). We don't need reinit on free'ing path anyway. I will send v2 with the fix. Thank you for noticing this.