From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755925AbbLLCtd (ORCPT ); Fri, 11 Dec 2015 21:49:33 -0500 Received: from p3plsmtps2ded03.prod.phx3.secureserver.net ([208.109.80.60]:41693 "EHLO p3plsmtps2ded03.prod.phx3.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754678AbbLLCsX (ORCPT ); Fri, 11 Dec 2015 21:48:23 -0500 x-originating-ip: 72.167.245.219 From: "K. Y. Srinivasan" To: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, devel@linuxdriverproject.org, olaf@aepfle.de, apw@canonical.com, vkuznets@redhat.com, jasowang@redhat.com Cc: Dexuan Cui , "K. Y. Srinivasan" Subject: [PATCH RESEND 19/27] Drivers: hv: vmbus: release relid on error in vmbus_process_offer() Date: Fri, 11 Dec 2015 20:21:39 -0800 Message-Id: <1449894107-3389-19-git-send-email-kys@microsoft.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1449894107-3389-1-git-send-email-kys@microsoft.com> References: <1449894084-3348-1-git-send-email-kys@microsoft.com> <1449894107-3389-1-git-send-email-kys@microsoft.com> X-CMAE-Envelope: MS4wfNtOSyyHMDFHAt1AwIyWRgh4iCTx0FMj+8V/nICMBdb0SPTjO+DS3ynyT28HGR6TgIQqkbsHbv3mU9yvN74ibcuBB2wFT2iW5x5U2BPhWYxDrNmLaN0i sXvtZzyFMVLokG3s557TRUPCzBMDvj4rO0c0SGOMYex/oNvv374O6TNpgsLHWlFUHXQaltkwd+Oe6MyUgQCgCbbb4ZZ7CipM8iaLiQSOUIQzK4Akgr+Ltloo cgSxiJQcTHjXTERRS7tjfRJwr6ssZHlilV0SAmP07Aqo5r7pm2hyXHxVKSiIZBbE1qt0wGO7plZNDXa1hrf3CpePyhKyr7I8rbSx0OjnypJD9k/QJw7mtqfw 2jhLZUV4SkssAWUBvz4TBcZhrL2ygRzHpDrMGzKVMMXoj1o0yV3rurLQ1/zozVAG3aWSc1xzjJg3awlETXvN1P5r+6DPxw== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dexuan Cui We want to simplify vmbus_onoffer_rescind() by not invoking hv_process_channel_removal(NULL, ...). Signed-off-by: Dexuan Cui Signed-off-by: K. Y. Srinivasan --- drivers/hv/channel_mgmt.c | 21 +++++++++++++++------ 1 files changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c index 7903acc..9c9da3a 100644 --- a/drivers/hv/channel_mgmt.c +++ b/drivers/hv/channel_mgmt.c @@ -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; } -- 1.7.4.1