Received: by 2002:a05:7412:a9a2:b0:e2:908c:2ebd with SMTP id o34csp523758rdh; Thu, 26 Oct 2023 08:29:31 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH3aF8np43hDVIcaX7S+rCosYtGhWAWfDPwMD7FSl2KLYTGISBHzZkq253gVdCpg8XrxAe1 X-Received: by 2002:a25:dc04:0:b0:da0:4576:3689 with SMTP id y4-20020a25dc04000000b00da045763689mr8047072ybe.25.1698334170950; Thu, 26 Oct 2023 08:29:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698334170; cv=none; d=google.com; s=arc-20160816; b=iAt0ztCJGwG3p8aF+fOL3eRjQgVmOHWn67i99lgPJjPQ0qynKRAo36TbdCMRD5tL8W Hsv4J4SMBA8lQKue1RlrjF5jFBZPoSV6IcC03PPcbV8f1ks0SMYsKNjQnii7/m+1a725 38kfNdBSNezZV5oPKIWTPXm3tuJtLYqvtevFpw4m3hY2wiappPIZ4w/AHe7U2sp63UBZ 0Yh/QqjJRMKq7yCjktXTM3INqOYbIP95fAh+PJKoSg9qUbeR0IK5uRl4h+EJtRkOOGOo pwhwfCYcKSm2cT5JGvnBA3J5nox9elPQT4xAstN0m7wkqWSWtta7xmEnbyW/NacSEmaO GCWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=Qg8xenpWV+v5VQuCTbPy80HRMo47tpWqPdmDb0kVSN8=; fh=nK/B2gIzvYPsKU0sJgdKEVdz5eoE00hHt727sEimwsQ=; b=OtyyRF20wgEzPzKnzSMEtJ7oRkQEMF3q8fdEZUeiBLrug6zQUc8o348JnNbCbuWdLr +xN9wsEYeZqhFF0wT/+4WPcCQ4EF2lXfPYL/zp0a7LhUsVy0VcSusOQjolXuyz9vHJ6C qRZcey/Y5MLo1BJZZUAWy1nXngdmQrXPuhzq36aCqoGhrv806gXJznPHIAv1UiuEUgM4 3/l9lpH+DITI9T7rueZDUjInK/y95uJdA/wqgS85vGCCbNPEXF6ozOHldt0JswC+P/1H CuEq4OWPjGbitJr5p1+Vh8jkpe88jGuYyHAkQ3eCoI2+Wc6JznuDMGLUh2FfrgUcy8MN uDrw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@posteo.net header.s=2017 header.b=PpyfEGVH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=posteo.net Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id y71-20020a25dc4a000000b00da052f70069si7391421ybe.11.2023.10.26.08.29.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Oct 2023 08:29:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@posteo.net header.s=2017 header.b=PpyfEGVH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=posteo.net Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id DF2D6826BB84; Thu, 26 Oct 2023 08:29:19 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345441AbjJZP3O (ORCPT + 99 others); Thu, 26 Oct 2023 11:29:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60392 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231200AbjJZP3N (ORCPT ); Thu, 26 Oct 2023 11:29:13 -0400 Received: from mout02.posteo.de (mout02.posteo.de [185.67.36.66]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0A99D187 for ; Thu, 26 Oct 2023 08:29:08 -0700 (PDT) Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 73AAB240106 for ; Thu, 26 Oct 2023 17:29:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1698334146; bh=H64qUyJiele93axV3rB3BVXjSk5GIMWyc2Mutlt6LLs=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version: Content-Transfer-Encoding:From; b=PpyfEGVH22Gu+tpAxSQXOPSj556OPsPQV3DIadsQDbDG226YkoPexZurUNJIGzgHa 79vfltvsc6QBRvPLz+OPYpDLmXq4h7cFqFs5YZyrUyLAlHCf1YL513LRsEFApuUsWK kXCp/+l4UdqS8/X9xpdwisxQsawxKSlyR7aylWYOxoQSh6jIFVKfKnFPVxxfzNyZjE UCyKD2CGfyQIFV3KKjPbwgZcA2HBwsQPFxnh/Se3MnYxqxrBajiBITmhFbNsT8Cm6E Uz2EY15Ki77Yqg+Ac0YgdCIURJIcidT+UxZKUHF1GZhjblNwysvkMdOc/rtYnrUVpM +ym2OeADlpIPw== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4SGV800Z7cz9rxN; Thu, 26 Oct 2023 17:29:03 +0200 (CEST) From: Mark O'Donovan To: linux-kernel@vger.kernel.org Cc: linux-nvme@lists.infradead.org, sagi@grimberg.me, hch@lst.de, axboe@kernel.dk, kbusch@kernel.org, hare@suse.de, Mark O'Donovan Subject: [PATCH] nvme: fine-tune sending of first keep-alive Date: Thu, 26 Oct 2023 15:28:57 +0000 Message-Id: <20231026152857.176594-1-shiftee@posteo.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Thu, 26 Oct 2023 08:29:20 -0700 (PDT) Keep-alive commands are sent half-way through the kato period. This normally works well but fails when the keep-alive system is started when we are more than half way through the kato. This can happen on larger setups or due to host delays. With this change we now time the initial keep-alive command from the controller initialisation time, rather than the keep-alive mechanism activation time. Signed-off-by: Mark O'Donovan --- drivers/nvme/host/core.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 21783aa2ee8e..f3ca3e1d4a74 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -1192,8 +1192,16 @@ static unsigned long nvme_keep_alive_work_period(struct nvme_ctrl *ctrl) static void nvme_queue_keep_alive_work(struct nvme_ctrl *ctrl) { - queue_delayed_work(nvme_wq, &ctrl->ka_work, - nvme_keep_alive_work_period(ctrl)); + unsigned long now = jiffies; + unsigned long delay = nvme_keep_alive_work_period(ctrl); + unsigned long ka_next_check_tm = ctrl->ka_last_check_time + delay; + + if (time_after(now, ka_next_check_tm)) + delay = 0; + else + delay = ka_next_check_tm - now; + + queue_delayed_work(nvme_wq, &ctrl->ka_work, delay); } static enum rq_end_io_ret nvme_keep_alive_end_io(struct request *rq, @@ -4451,6 +4459,7 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev, INIT_DELAYED_WORK(&ctrl->failfast_work, nvme_failfast_work); memset(&ctrl->ka_cmd, 0, sizeof(ctrl->ka_cmd)); ctrl->ka_cmd.common.opcode = nvme_admin_keep_alive; + ctrl->ka_last_check_time = jiffies; BUILD_BUG_ON(NVME_DSM_MAX_RANGES * sizeof(struct nvme_dsm_range) > PAGE_SIZE); base-commit: 611da07b89fdd53f140d7b33013f255bf0ed8f34 -- 2.39.2