Received: by 10.223.185.116 with SMTP id b49csp6118369wrg; Wed, 28 Feb 2018 04:25:04 -0800 (PST) X-Google-Smtp-Source: AH8x2276L3LIiqdcivfEztvSJ1jMxK0/EX3Cl6ODBlCFCt2mYIGyS8j62EwReL1dUSURGCKeRfQ+ X-Received: by 10.101.82.69 with SMTP id q5mr13928481pgp.259.1519820704324; Wed, 28 Feb 2018 04:25:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519820704; cv=none; d=google.com; s=arc-20160816; b=jygZG/tvncvxSEvO5jaMYM6+heqWz3ngOyIu4NoeIheHWwO90rjSPfmeaigEs69i66 agkxujBmB9AJLNjwB/uujB5+LEY15La+nzXyJ09IiVJoHaSsN97Hf/yOBlzNUf4gX+Vd Iji4qFg6kW1EAeHpuoQDCJnUqekro1pSMX8eeZm4b+XE4FfbLufqPpC7RLpul28Njuzg k3Edpp1lj3f0gMS0Xj4vaD8UvHTSUkCegewJik0aTGnr7YL/BaYsVZ0yNh0loJt0U3Q2 BBER6Ja1XVBeKFPatlr683M99a4OM2RMub17ej2uutQp2qWh1sQLmNnmXOexCsXXoxrA lFnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=4QHV8Di1BxNXyzFDGFWz/8O6BKU4ZdUMdgCIUetiv+o=; b=Lx2ozLTlmxVep2g6QdK/kRlROHDzS1PXzo/WFMskF8hBIxI8ieU1Ws6XKWDLwg69EQ Zw4S6gMDNWY4GqiKkLY3uAnw8Ems6FAmgf3pmX2oPiFs9dAeabhS8U2MHKMNFRll4zjS 4WPqNYlZMicKr5kooHb+sldrcO4yGTIcxfwp/Cnm9WYi4OuCYp4KsBM2RHOyY+I3SUcI aEQG5u1w+hnk7hXHN/U3O/twDrBUw0YPCV3BJlXkoFy2b5k55UDInYm7O38ixOyQl2zt HMRZ+VyuFYJ0Wj/NpeuVcqXz7am1Z+xOzr+3HCLaJ/0XQlv8MMAs1SATIOlCyKgNGzoC CbxA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jykBhXpB; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k20-v6si1198107pls.294.2018.02.28.04.24.48; Wed, 28 Feb 2018 04:25:04 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jykBhXpB; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752511AbeB1MYH (ORCPT + 99 others); Wed, 28 Feb 2018 07:24:07 -0500 Received: from mail-qt0-f196.google.com ([209.85.216.196]:39480 "EHLO mail-qt0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752219AbeB1MYF (ORCPT ); Wed, 28 Feb 2018 07:24:05 -0500 Received: by mail-qt0-f196.google.com with SMTP id f4so2638474qtj.6; Wed, 28 Feb 2018 04:24:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=4QHV8Di1BxNXyzFDGFWz/8O6BKU4ZdUMdgCIUetiv+o=; b=jykBhXpBxHWS5Ma7YGBG5y04kssKCkHOcxJpTS31U8XE9thCYPeraTAyoX/EocrXSo 9AXxd5WNMOQIcW/aduDK6bZMLZnOvDeKbnxGAx/THsxOX28C6OlOG+gp9UQCZXFdyVwJ vGoqz0NcnmPKl4gdbrMMq56RwPM50V+2C64xfbTA9hyIBx8kZWSJa64rV/Efs29F0lU+ tR61vXl7HhapQjcCTWQf1VpSm65A0WA3X1jIrLqyoj4ZctvjHWd3JqDGRzBzH0/hYQFu 3I3JNxJCleyY6K0usLQspVzIQm1QXToVDAAD57oLVz+VCJfn6o3ooQ9ozI/rt15Qzv7a cIjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=4QHV8Di1BxNXyzFDGFWz/8O6BKU4ZdUMdgCIUetiv+o=; b=RoLEGpOIKRKeoSfs3Kk1TeaJ6JIVilWLHpgOOP2svWoG7x40lB1Utu7u/0N4VL192G 0zj2ALlAjCa5HcMXzGu1gq24sl2YXf5eSREXnJHOWoslub1/1rKHIyBODYhDg2aKdRhF xTcWK9d9WrOw33FBBCKV+91SwTPblmQuKsuDtqDBjiaxf99n1loRzCFCuq6xNXO1b1ZR 3T+JTzY2SnI8bQWT8OaZ4945/ltYF9hqHhC5dX5G9SLJ+HELTArR1Dwq0t6qRsQ6imLs zmfV7uzXqgnhqBmW9FLVECuBCSojzMLsQ8/EV8zMyTI6bNGsv68chGJ5VLwpM4rmeYt6 4wlw== X-Gm-Message-State: APf1xPAFDFQugDvRkn7JuwioKW7FB9liNZbgHI3+3DTIhjK2IdDFe+V7 uP0c5UDZ5KRQa4OQn5Mgx88= X-Received: by 10.237.54.35 with SMTP id e32mr28086703qtb.322.1519820644593; Wed, 28 Feb 2018 04:24:04 -0800 (PST) Received: from pm2-ws13.praxislan02.com ([2001:470:8:67e:ba27:ebff:fee8:ce27]) by smtp.gmail.com with ESMTPSA id 12sm976104qkx.27.2018.02.28.04.24.03 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 28 Feb 2018 04:24:03 -0800 (PST) From: Jason Andryuk To: xen-devel@lists.xenproject.org, netdev@vger.kernel.org Cc: Jason Andryuk , Eduardo Otubo , Boris Ostrovsky , Juergen Gross , linux-kernel@vger.kernel.org (open list) Subject: [PATCH] xen-netfront: Fix hang on device removal Date: Wed, 28 Feb 2018 07:23:23 -0500 Message-Id: <20180228122323.3914-1-jandryuk@gmail.com> X-Mailer: git-send-email 2.14.3 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A toolstack may delete the vif frontend and backend xenstore entries while xen-netfront is in the removal code path. In that case, the checks for xenbus_read_driver_state would return XenbusStateUnknown, and xennet_remove would hang indefinitely. This hang prevents system shutdown. xennet_remove must be able to handle XenbusStateUnknown, and netback_changed must also wake up the wake_queue for that state as well. Fixes: 5b5971df3bc2 ("xen-netfront: remove warning when unloading module") Signed-off-by: Jason Andryuk Cc: Eduardo Otubo --- drivers/net/xen-netfront.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index 8328d395e332..3127bc8633ca 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c @@ -2005,7 +2005,10 @@ static void netback_changed(struct xenbus_device *dev, case XenbusStateInitialised: case XenbusStateReconfiguring: case XenbusStateReconfigured: + break; + case XenbusStateUnknown: + wake_up_all(&module_unload_q); break; case XenbusStateInitWait: @@ -2136,7 +2139,9 @@ static int xennet_remove(struct xenbus_device *dev) xenbus_switch_state(dev, XenbusStateClosing); wait_event(module_unload_q, xenbus_read_driver_state(dev->otherend) == - XenbusStateClosing); + XenbusStateClosing || + xenbus_read_driver_state(dev->otherend) == + XenbusStateUnknown); xenbus_switch_state(dev, XenbusStateClosed); wait_event(module_unload_q, -- 2.14.3