Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f52078cf authored by Dexuan Cui's avatar Dexuan Cui Committed by Greg Kroah-Hartman
Browse files

Drivers: hv: vmbus: release relid on error in vmbus_process_offer()



We want to simplify vmbus_onoffer_rescind() by not invoking
hv_process_channel_removal(NULL, ...).

Signed-off-by: default avatarDexuan Cui <decui@microsoft.com>
Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 34c6801e
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -177,19 +177,22 @@ static void percpu_channel_deq(void *arg)
}


void hv_process_channel_removal(struct vmbus_channel *channel, u32 relid)
static void vmbus_release_relid(u32 relid)
{
	struct vmbus_channel_relid_released msg;
	unsigned long flags;
	struct vmbus_channel *primary_channel;

	memset(&msg, 0, sizeof(struct vmbus_channel_relid_released));
	msg.child_relid = relid;
	msg.header.msgtype = CHANNELMSG_RELID_RELEASED;
	vmbus_post_msg(&msg, sizeof(struct vmbus_channel_relid_released));
}

	if (channel == NULL)
		return;
void hv_process_channel_removal(struct vmbus_channel *channel, u32 relid)
{
	unsigned long flags;
	struct vmbus_channel *primary_channel;

	vmbus_release_relid(relid);

	BUG_ON(!channel->rescind);

@@ -336,6 +339,8 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
	return;

err_deq_chan:
	vmbus_release_relid(newchannel->offermsg.child_relid);

	spin_lock_irqsave(&vmbus_connection.channel_lock, flags);
	list_del(&newchannel->listentry);
	spin_unlock_irqrestore(&vmbus_connection.channel_lock, flags);
@@ -587,7 +592,11 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr)
	channel = relid2channel(rescind->child_relid);

	if (channel == NULL) {
		hv_process_channel_removal(NULL, rescind->child_relid);
		/*
		 * This is very impossible, because in
		 * vmbus_process_offer(), we have already invoked
		 * vmbus_release_relid() on error.
		 */
		return;
	}