diff
+ static int vmbus_cleanup_ring(struct vmbus_channel *channel)
+ {
+     if (!channel || !channel->ringbuffer_page)
+         return -EINVAL;
+     
+     __free_pages(channel->ringbuffer_page,
+                  get_order(channel->ringbuffer_pagecount * PAGE_SIZE));
+     channel->ringbuffer_page = NULL;
+     channel->ringbuffer_pagecount = 0;
+     return 0;
+ }

1281 void vmbus_free_ring(struct vmbus_channel *channel)
1283         hv_ringbuffer_cleanup(&channel->outbound);
1284         hv_ringbuffer_cleanup(&channel->inbound);
-1286         if (channel->ringbuffer_page) {
-1287                 __free_pages(channel->ringbuffer_page,
-1288         }
+1286         if (vmbus_cleanup_ring(channel) < 0)
+1287             pr_err("Failed to cleanup vmbus ring\n");
