diff options
Diffstat (limited to 'drivers/hv/channel_mgmt.c')
| -rw-r--r-- | drivers/hv/channel_mgmt.c | 11 | 
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c index ff1be167eb0..bad8128b283 100644 --- a/drivers/hv/channel_mgmt.c +++ b/drivers/hv/channel_mgmt.c @@ -165,8 +165,19 @@ static void vmbus_process_rescind_offer(struct work_struct *work)  	struct vmbus_channel *channel = container_of(work,  						     struct vmbus_channel,  						     work); +	unsigned long flags; +	struct vmbus_channel_relid_released msg;  	vmbus_device_unregister(channel->device_obj); +	memset(&msg, 0, sizeof(struct vmbus_channel_relid_released)); +	msg.child_relid = channel->offermsg.child_relid; +	msg.header.msgtype = CHANNELMSG_RELID_RELEASED; +	vmbus_post_msg(&msg, sizeof(struct vmbus_channel_relid_released)); + +	spin_lock_irqsave(&vmbus_connection.channel_lock, flags); +	list_del(&channel->listentry); +	spin_unlock_irqrestore(&vmbus_connection.channel_lock, flags); +	free_channel(channel);  }  void vmbus_free_channels(void)  |