Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp1445350rdh; Fri, 24 Nov 2023 12:58:20 -0800 (PST) X-Google-Smtp-Source: AGHT+IF0a2IUIb3oCjoZU+t8UvCcsXuYC5PlN5I2Sf0HCCqQpit6X5FCSnFoing2FatBiyn3XkFZ X-Received: by 2002:a17:903:264b:b0:1ce:5b21:5c34 with SMTP id je11-20020a170903264b00b001ce5b215c34mr3892715plb.5.1700859500092; Fri, 24 Nov 2023 12:58:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700859500; cv=none; d=google.com; s=arc-20160816; b=uyWmmNlz82P/r76cdv3Qz3rNPT8Yi5nqjFmTn19zW5rUDnrB+BdqQ2fBemjXK1t7Q9 gWTrD4EHmrlbL+oqL4bhIlvTF8ef76aAWMjDRc7hf2iJSL8lHe8pl50b5ZXBkERYmK9O uXgjPEyzhHf7Jgwgu/zGVaSdJ+1rAhSDe1qrf4TW9sRgRD1zRa7f6tJAl+zX6l4cS5h/ L/PAdthOovKjW6iFJ7+5+l5J+W0kBzK/ybWj+3f8Fo8EQJpqyC/vybfH4Bx2wlsvmLAZ 4NF561vCl+LBpqtV6VhXz2KxLzK7hQMsX0dfd2/4t/tzh/65dbia1oLBdq53tWSr/Lp8 0cfQ== 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=jfjvoxjM5f50l15PkwYK+W31izBUXsyXN9vp6wQSga4=; fh=nK/B2gIzvYPsKU0sJgdKEVdz5eoE00hHt727sEimwsQ=; b=zIiRo6l9guhYuTEa3uDDdXiAAMyGUiDtuTcldXL/43D53W7e2SlHrqtAbUbMwazY36 KtUHfGEWhZMTWZc5rzTgLOxOT8TGor4r4QXSowRdXWkV3++bQ9Speuyv3ilOiy3+n5o/ KOerntAJ4jdzJVopVO9ygNn2HOvVcN8zOB2cNOL2KQcUiI89ghaSCJoub8RiRD1KWq9e YMsx0tQvYgYS8o5XgUGGSbfipcG0Jg2C91IUyuM75rt9qIhI9iOpeutLUIw1B4xjT2NA SaIPVrlI9vGeTuFpM0FLfXJK8rkG3IPhlAtX/BL9xeWMoGYa+MXDXQ7qmU/dIY9yOs3a /e9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@posteo.net header.s=2017 header.b=ATwDadX1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 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 snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id d13-20020a170903230d00b001cf638977f5si4574093plh.373.2023.11.24.12.58.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Nov 2023 12:58:20 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@posteo.net header.s=2017 header.b=ATwDadX1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 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 snail.vger.email (Postfix) with ESMTP id 3C05B805A79A; Fri, 24 Nov 2023 12:57:28 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231487AbjKXU5Q (ORCPT + 99 others); Fri, 24 Nov 2023 15:57:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229677AbjKXU5P (ORCPT ); Fri, 24 Nov 2023 15:57:15 -0500 Received: from mout01.posteo.de (mout01.posteo.de [185.67.36.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6869F12B for ; Fri, 24 Nov 2023 12:57:20 -0800 (PST) Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id 41AA4240027 for ; Fri, 24 Nov 2023 21:57:17 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1700859438; bh=VUY/r48iuYNklA3pOPBW8jilcpXCwFMRejWJXce3tks=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version: Content-Transfer-Encoding:From; b=ATwDadX1/5k2Zv9OtETrV/kpzy03/jc89TOifHaP7JU/FWHtiGOkoCiSZz3d/NBL6 mZEL4wBs20g4K2+C97PEQWM14oeMm434q52x2ViKkqQK4v68S1eCP2l3MJOmLZuK3h KIa1tM+yrCSr3D4fbhYvvr6diYqIvy8t9uBjv+TNlbkumjBs6gD1tFrMzrSssYRIBD F140F3BWnZmfMn3/Va5bXLT9EdsuCxAkDqKo8zRL6ril3YWIPY/nuHAqcg0NsqTLO8 QFHfxB7vHGX6e/ZgIzhvI2uxH4PmzwY663VFposVvBs12atc7dwSoXAio+60zGbgRM iBMDy0+85lQoQ== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4ScS3H31gWz9rxR; Fri, 24 Nov 2023 21:57:15 +0100 (CET) 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 RESEND] nvme: fine-tune sending of first keep-alive Date: Fri, 24 Nov 2023 20:56:59 +0000 Message-Id: <20231124205659.523248-1-shiftee@posteo.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net 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 (snail.vger.email [0.0.0.0]); Fri, 24 Nov 2023 12:57:28 -0800 (PST) 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 46a4c9c5ea96..8bf24c1cd8bb 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, @@ -4471,6 +4479,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: 5b7ad877e4d81f8904ce83982b1ba5c6e83deccb -- 2.39.2