Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1130847ybt; Tue, 7 Jul 2020 08:26:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyV5rDaCYAwi1FupP5Wh98v+5wMLX0z9vtNoTTFYBf7GVj4qgTHWeTxxefuyY+fh6iYgpVP X-Received: by 2002:a05:6402:1655:: with SMTP id s21mr59825905edx.289.1594135595622; Tue, 07 Jul 2020 08:26:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594135595; cv=none; d=google.com; s=arc-20160816; b=cuzBEPU0cFC2CFaUEiFi/e9NqGyb6EUa174rfSn7AbIViuPnbudLvNMK1dbZTsQmIC E6J74z8P0zYY+UOzJAw9Zpq4dGKw9PiiA0RAd64mAZB76wcMR09jp6gZyYkQFOvhu7wv nbZoPyutOyTd25CP6L7SZ5G3ImxhmeV1kcuOU+NYQuGcI4UyaaLqQiCVNMpiHFpfLjCV sOJ9W6YzhOfKkvfHLPR2FWOxv/tVtop4601zvUUAwMdawc6ucYkFiVBZaWJe4q4iDkYw CMk4MW6adwZ+qSpk6GEQv2zC914nYCMAPlt9YWJtS7IUjNZI122ARjXUC9hlb1OBdN3o auog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=CoKWLbBLd5yerAyV8D9luUR0cWz9E9Ki5+HU7YJXH7A=; b=LjJMrHM4xqDxjVTH41bKJ9ge8dzfIxFDxtPuI7orsT+FY0zwwm3MUdioxCuvawjuCr u9I8bQUoMIIMH5xk0Fg5Yc+CI6KvcojI5jJpZib9OiwNAnfJbCC9vdaBJ/AqF2Eo0QlK mXObbG2IERJCFAmOEDDwpwsp05kLB0So3Q7cHunLNv9FQfa7UfpkZaETo9p0/JwMysWI zvpqFIZ23XmnUudHCOlelVY6RN+psz+yXUP3VejEvLeYwMNqnULGFq94/RQ/GklDAozB LnhFYWPHUMoEXRfmyi+wnplaw2XojfdWXqgqgEr5KnO9z+HZADcJeGnf7PbLQ/q5xegP gyUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=UZiMDYxp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k13si14500380ejq.296.2020.07.07.08.26.11; Tue, 07 Jul 2020 08:26:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=UZiMDYxp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729458AbgGGPY7 (ORCPT + 99 others); Tue, 7 Jul 2020 11:24:59 -0400 Received: from mail.kernel.org ([198.145.29.99]:38632 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730155AbgGGPYz (ORCPT ); Tue, 7 Jul 2020 11:24:55 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 617BC20663; Tue, 7 Jul 2020 15:24:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594135494; bh=1vbPAtHeq3nKicDWuZcnx1viEjrIU0IOgLUmA2NYj1Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UZiMDYxpyE9IIlFWcXDufi5MiK2bqEPowApSfOATO9GXax4OjjXIsVNB8me6UXePt qZD61EpmiRK/alhFejn1WGOBwstvek8C1h4MR4z1eif0XPxuZHCutrOHAoPlqXDSyk 5NllH4fhP8vlWzY7bufLp0ifhtB+t703MWmYQuLI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Taehee Yoo , "David S. Miller" , Sasha Levin Subject: [PATCH 5.7 056/112] hsr: remove hsr interface if all slaves are removed Date: Tue, 7 Jul 2020 17:17:01 +0200 Message-Id: <20200707145803.665343106@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200707145800.925304888@linuxfoundation.org> References: <20200707145800.925304888@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Taehee Yoo [ Upstream commit 34a9c361dd480041d790fff3d6ea58513c8769e8 ] When all hsr slave interfaces are removed, hsr interface doesn't work. At that moment, it's fine to remove an unused hsr interface automatically for saving resources. That's a common behavior of virtual interfaces. Signed-off-by: Taehee Yoo Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- net/hsr/hsr_main.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/net/hsr/hsr_main.c b/net/hsr/hsr_main.c index 26d6c39f24e16..e2564de676038 100644 --- a/net/hsr/hsr_main.c +++ b/net/hsr/hsr_main.c @@ -15,12 +15,23 @@ #include "hsr_framereg.h" #include "hsr_slave.h" +static bool hsr_slave_empty(struct hsr_priv *hsr) +{ + struct hsr_port *port; + + hsr_for_each_port(hsr, port) + if (port->type != HSR_PT_MASTER) + return false; + return true; +} + static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event, void *ptr) { - struct net_device *dev; struct hsr_port *port, *master; + struct net_device *dev; struct hsr_priv *hsr; + LIST_HEAD(list_kill); int mtu_max; int res; @@ -85,8 +96,15 @@ static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event, master->dev->mtu = mtu_max; break; case NETDEV_UNREGISTER: - if (!is_hsr_master(dev)) + if (!is_hsr_master(dev)) { + master = hsr_port_get_hsr(port->hsr, HSR_PT_MASTER); hsr_del_port(port); + if (hsr_slave_empty(master->hsr)) { + unregister_netdevice_queue(master->dev, + &list_kill); + unregister_netdevice_many(&list_kill); + } + } break; case NETDEV_PRE_TYPE_CHANGE: /* HSR works only on Ethernet devices. Refuse slave to change -- 2.25.1