From patchwork Mon Mar 27 18:37:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mahesh Bandewar X-Patchwork-Id: 743948 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3vsN7z5J0rz9s1y for ; Tue, 28 Mar 2017 05:38:23 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=bandewar-net.20150623.gappssmtp.com header.i=@bandewar-net.20150623.gappssmtp.com header.b="Usu8Or1W"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752148AbdC0SiF (ORCPT ); Mon, 27 Mar 2017 14:38:05 -0400 Received: from mail-pg0-f68.google.com ([74.125.83.68]:33974 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751287AbdC0SiC (ORCPT ); Mon, 27 Mar 2017 14:38:02 -0400 Received: by mail-pg0-f68.google.com with SMTP id o123so12251325pga.1 for ; Mon, 27 Mar 2017 11:37:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bandewar-net.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=I9yw6yLfgSmOc2D4OalAGe34SGW87aHmuyGJOnPyPfU=; b=Usu8Or1WzK2O6UXzhb1f4UjP8ALNjEwKaUtLx+OT75HUvwwGclkJovsMpHW/XM2ZuX /UQUXBzNXGJjjTWcLG/3NjWfGmmBPXGVep3c02ISa3P7XWgQjrbao9p9g6OQ53keb9E6 MLTK0ye5lH3I36mLSUEQgrz/5Qpgy4ROoD7umv+C2/fvkAVDzjD8LXkR1l1z+ab2r3w2 /42+lTe8uBh/Z7yBBwsIs6cjmqcSsZFEDnPbq6lRGJEGaNeePJ/qkF/eR2qG28VBsdzR /IWwsEoHDcwaamg4zHGuFPaETT2k3xmZpcKbTVm2/PySpXI16TDCqWmIWrVf2Jkoqofy idSA== 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=I9yw6yLfgSmOc2D4OalAGe34SGW87aHmuyGJOnPyPfU=; b=K7Po9IQy9QvpwoqyiooQMglAJbt8Yc2WvUTly5n2kdLNd/bQ2I/gQ8ho4TfdjkwVoh 1qdQ6J/JX2hiPvM//0U2uQTqRLEO76FyJpSzh25UIrQdNd1rE4Kb7tILnVEdcbFg3NuL VJ2l1fgBrpQM/xTJ247sgeyO9UIFr6qCuLrTYWTmHkBXVWV94VzGOG9v7O6Z92Ac3nZj Ff7othuCo1iKk9t2zZ+/C5MDjPxx7GBASSX3n0D9rDp8zYhJGhEvakDEh6bFvR/6Qmbm uO45SlQ4xZlt0Swzd9SxbuhztE7hHxPJo10HLCuWkb7tDW02lhbBIqxFcx0/o1yndx1W ipYg== X-Gm-Message-State: AFeK/H1JGP7RgzmE2lXgfAUpOUhkPter+TL1QmIET7GWaLxbTPo/fQpKJjztm4GhQA5rTA== X-Received: by 10.84.222.131 with SMTP id x3mr4933525pls.184.1490639857482; Mon, 27 Mar 2017 11:37:37 -0700 (PDT) Received: from localhost ([2620:0:1000:3012:18b6:8c75:2322:90f6]) by smtp.gmail.com with ESMTPSA id c75sm2587232pga.22.2017.03.27.11.37.36 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Mon, 27 Mar 2017 11:37:36 -0700 (PDT) From: Mahesh Bandewar To: Jay Vosburgh , Andy Gospodarek , Veaceslav Falico , Nikolay Aleksandrov , David Miller , Eric Dumazet Cc: netdev , Mahesh Bandewar , Mahesh Bandewar Subject: [PATCH next 3/5] bonding: make speed, duplex setting consistent with link state Date: Mon, 27 Mar 2017 11:37:35 -0700 Message-Id: <20170327183735.30921-1-mahesh@bandewar.net> X-Mailer: git-send-email 2.12.1.578.ge9c3154ca4-goog Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Mahesh Bandewar bond_update_speed_duplex() retrieves speed and duplex settings. There is a possibility of failure in retrieving these values but caller has to assume it's always successful. This leads to having inconsistent slave link settings. If these (speed, duplex) values cannot be retrieved, then keeping the link UP causes problems. The updated bond_update_speed_duplex() returns 0 on success if it retrieves sane values for speed and duplex. On failure it returns 1 and marks the link down. Signed-off-by: Mahesh Bandewar --- drivers/net/bonding/bond_main.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 85999e479916..ad317bb63193 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -365,9 +365,10 @@ int bond_set_carrier(struct bonding *bond) /* Get link speed and duplex from the slave's base driver * using ethtool. If for some reason the call fails or the * values are invalid, set speed and duplex to -1, - * and return. + * and return. Return 1 if speed or duplex settings are + * UNKNOWN; 0 otherwise. */ -static void bond_update_speed_duplex(struct slave *slave) +static int bond_update_speed_duplex(struct slave *slave) { struct net_device *slave_dev = slave->dev; struct ethtool_link_ksettings ecmd; @@ -377,24 +378,27 @@ static void bond_update_speed_duplex(struct slave *slave) slave->duplex = DUPLEX_UNKNOWN; res = __ethtool_get_link_ksettings(slave_dev, &ecmd); - if (res < 0) - return; - - if (ecmd.base.speed == 0 || ecmd.base.speed == ((__u32)-1)) - return; - + if (res < 0) { + slave->link = BOND_LINK_DOWN; + return 1; + } + if (ecmd.base.speed == 0 || ecmd.base.speed == ((__u32)-1)) { + slave->link = BOND_LINK_DOWN; + return 1; + } switch (ecmd.base.duplex) { case DUPLEX_FULL: case DUPLEX_HALF: break; default: - return; + slave->link = BOND_LINK_DOWN; + return 1; } slave->speed = ecmd.base.speed; slave->duplex = ecmd.base.duplex; - return; + return 0; } const char *bond_slave_link_status(s8 link)