From patchwork Mon Mar 6 13:46:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Gardner X-Patchwork-Id: 735710 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3vcLg0358zz9sN5; Tue, 7 Mar 2017 00:46:36 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical-com.20150623.gappssmtp.com header.i=@canonical-com.20150623.gappssmtp.com header.b="0vOEHEuY"; dkim-atps=neutral Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.76) (envelope-from ) id 1cksy6-0001Zh-OM; Mon, 06 Mar 2017 13:46:30 +0000 Received: from mail-io0-f171.google.com ([209.85.223.171]) by huckleberry.canonical.com with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1cksy2-0001YS-57 for kernel-team@lists.ubuntu.com; Mon, 06 Mar 2017 13:46:26 +0000 Received: by mail-io0-f171.google.com with SMTP id 90so113091498ios.1 for ; Mon, 06 Mar 2017 05:46:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id; bh=9RDhPcCPFXgPmz+HXu7y6if6usWvuAScK+ZutaAZuK8=; b=0vOEHEuY61zEnKzNRsGtqNvxx0KugmgzHUoRqEJilx87zI9ztCckdnNmzBRXf4D7t7 +kWvvEOxSgjTNNcaofkYSwABSLNVWac2qKrASLg7nNIgBWJXtiqh5gnH6ifgSq/942BO 3E32qaMP8zlirV98KBHCfI/WBj0YklyItgUmx7H2zP+SRv1zFWH9us8h65uQzOBRabor jXh10rxTMAWkpLmoz8IFxFtrwcSPOtOxEbkfTQDN+WjEjlj7liphJsEBlbecmBlCRn2O WrWUbLwQn1wcpN2iz9Nk8VQhXya8L57swOUUaXJlLOMLKboDWoCMRNom42V2U1ARx9Dg mGRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=9RDhPcCPFXgPmz+HXu7y6if6usWvuAScK+ZutaAZuK8=; b=ZL3m2gEusQtBznem3eIOG9IY5Xm7FrU6GjJj4fgc2tCQb/OB3R3IzD7tIvw1rZ7qg5 p25OUV5e6GrNsMqwM1RUS3KZ0N9hRGIrplFDi7wdQHyWEgKQx1OZjt1nkDuKJMsPEaSj Y9PcLrll9Gc8W7d5rlm9JCMa6r31/dokOBpT83vrFY6nEKw7Pt0jiBsYrt3aO9MEZ053 K4+aYbg29BVRiHBafWrwMUyuNqX4oNWl1aRnFjlD+GidupjnKCxyTSTnDy215CU0VX6C w9s+c9Qs722QwZFa4Ol/HKkR3YteJHtLtKZYx0pevKfkDnnPWmuhwJXwhZHLUWDxcXK+ 2Ieg== X-Gm-Message-State: AMke39k996owMWAWCHjsqs9SlFjsmw2cvNYFTjwBDnCEosBdHhunJV7p+VbA3QwsNgSkL5vb X-Received: by 10.107.44.23 with SMTP id s23mr16253451ios.229.1488807984785; Mon, 06 Mar 2017 05:46:24 -0800 (PST) Received: from localhost.localdomain (host-98-127-250-84.bln-mt.client.bresnan.net. [98.127.250.84]) by smtp.gmail.com with ESMTPSA id a197sm4901220ita.1.2017.03.06.05.46.23 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 06 Mar 2017 05:46:24 -0800 (PST) From: Tim Gardner To: kernel-team@lists.ubuntu.com Subject: [PATCH Yakkety SRU] Call echo service immediately after socket reconnect Date: Mon, 6 Mar 2017 06:46:20 -0700 Message-Id: <1488807980-14406-1-git-send-email-tim.gardner@canonical.com> X-Mailer: git-send-email 2.7.4 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.14 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: kernel-team-bounces@lists.ubuntu.com From: Sachin Prabhu BugLink: http://bugs.launchpad.net/bugs/1669941 Commit 4fcd1813e640 ("Fix reconnect to not defer smb3 session reconnect long after socket reconnect") changes the behaviour of the SMB2 echo service and causes it to renegotiate after a socket reconnect. However under default settings, the echo service could take up to 120 seconds to be scheduled. The patch forces the echo service to be called immediately resulting a negotiate call being made immediately on reconnect. Signed-off-by: Sachin Prabhu Reviewed-by: Pavel Shilovsky Signed-off-by: Steve French (cherry picked from commit b8c600120fc87d53642476f48c8055b38d6e14c7) Signed-off-by: Tim Gardner --- fs/cifs/connect.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index a178f3a..6ebf0cb 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -414,6 +414,9 @@ cifs_reconnect(struct TCP_Server_Info *server) } } while (server->tcpStatus == CifsNeedReconnect); + if (server->tcpStatus == CifsNeedNegotiate) + mod_delayed_work(cifsiod_wq, &server->echo, 0); + return rc; } @@ -423,17 +426,25 @@ cifs_echo_request(struct work_struct *work) int rc; struct TCP_Server_Info *server = container_of(work, struct TCP_Server_Info, echo.work); - unsigned long echo_interval = server->echo_interval; + unsigned long echo_interval; + + /* + * If we need to renegotiate, set echo interval to zero to + * immediately call echo service where we can renegotiate. + */ + if (server->tcpStatus == CifsNeedNegotiate) + echo_interval = 0; + else + echo_interval = server->echo_interval; /* - * We cannot send an echo if it is disabled or until the - * NEGOTIATE_PROTOCOL request is done, which is indicated by - * server->ops->need_neg() == true. Also, no need to ping if - * we got a response recently. + * We cannot send an echo if it is disabled. + * Also, no need to ping if we got a response recently. */ if (server->tcpStatus == CifsNeedReconnect || - server->tcpStatus == CifsExiting || server->tcpStatus == CifsNew || + server->tcpStatus == CifsExiting || + server->tcpStatus == CifsNew || (server->ops->can_echo && !server->ops->can_echo(server)) || time_before(jiffies, server->lstrp + echo_interval - HZ)) goto requeue_echo; @@ -444,7 +455,7 @@ cifs_echo_request(struct work_struct *work) server->hostname); requeue_echo: - queue_delayed_work(cifsiod_wq, &server->echo, echo_interval); + queue_delayed_work(cifsiod_wq, &server->echo, server->echo_interval); } static bool