diff
+#include <linux/atomic.h>

void vmbus_free_ring(struct vmbus_channel *channel)
{
	hv_ringbuffer_cleanup(&channel->outbound);
	hv_ringbuffer_cleanup(&channel->inbound);

	if (channel->ringbuffer_page) {
+		struct page *temp = xchg(&channel->ringbuffer_page, NULL);
-		__free_pages(channel->ringbuffer_page,
+		__free_pages(temp,
			     get_order(channel->ringbuffer_pagecount
				       << PAGE_SHIFT));
-		channel->ringbuffer_page = NULL;
	}
}
