Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp1213103imm; Tue, 15 May 2018 15:52:34 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqlkcsVBKT3dAoWJo9llOkSo/8l+HJzTyUdyK7EBhKRDckYTVqSwhTDqNEDI4o8wiXl69ke X-Received: by 2002:a65:661a:: with SMTP id w26-v6mr13781192pgv.151.1526424754818; Tue, 15 May 2018 15:52:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526424754; cv=none; d=google.com; s=arc-20160816; b=R0VP9zZ63p7dlkD1xsmF65Xlsly5IPs54LKiB9efytaFdPiE9Sfz4h+7vVfWK6PfGR SuNyCr6mavyXqjUBWMhr/7BUP39GnVWgfj11NusSu8mpR5CvVtF6GwqOulQvDmPfb1nS 6pOlLI9OGEJrsDMfW/CtMOJhL7OIU8y49mTx4apFqxLaciSioOCwi7HYJOTr0HjGKkJv SxOP+ksLHyhyojkEU5aXn99une8P8QIhJ/ZmoPy51arnVhzKRSORT4f3SBfX792gTAgQ nA6Wc1JiO18j3W/+JhFpwwsclbr2yNFZsw9IVexjYcHWESZCbm4V5ccBW5Yr1ofjH+0J zasg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=JpW3qb6FjO5h7ScLXAoXMrJJRWtCSn12UvByEZoxQSo=; b=zw5t4Nen6YsHaejpqGRSDLlzqg+3M/RgK1qutOo4FhXy2Rhm7iyhhJ94w9FlLm5iRe aqaKaR4F0euowQYrRpHN46skyK3MgoSbFwLCh6U6p4akMiRTaUiZPBDSN7bFOHQnC6gA Nzgn8LKP6aipDqCihQlkRnhEzmR4GA5lz4Q7XJpckhvk1HeFZA9D4vzJbhP3KrMqNb0k uk5J1M6rYYXMsFc3uO2mSas9IuBZPVLUJtm+nW6JkFkkmXiU8pJGO1bdRtoZhkdJafO9 Pt/sJIhWJy68CVkJHA6lOSceVjdK+3P6FQoyJdq6jA8YkVM7xxusulcZliB1eVjnF2/N tJ/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=a4khmAS9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b4-v6si984410pla.345.2018.05.15.15.52.20; Tue, 15 May 2018 15:52:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=a4khmAS9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752454AbeEOWvo (ORCPT + 99 others); Tue, 15 May 2018 18:51:44 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:12445 "EHLO esa5.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751099AbeEOWvd (ORCPT ); Tue, 15 May 2018 18:51:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1526424694; x=1557960694; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=RNdWitnLsrKzUVI1iX+vOqzLBZRBd1UP5X+kgghtBGM=; b=a4khmAS9v0ybAWtw7qIblONIedSs3Bad15Woc4NH71huIWaogNcrCKsB LZoKt07FYSVXaQre5OQVKsEUBdGsnrtVmXHMUTRnxmnUXm0lcpa0acO/v hiE88r+9aHPTtY9qM+hJ7fKXVYpzrOPDD7MkawcloWgjnCZzVcUGY4QAI 4S4pQmiUhmFbyw8+YKld0vi5uBZvAag5vN4CSQlv/woNU6U0lBJ0lrG5J 1PcdRtG0SvcuONXWBBGTW1Kls0nrMBdrnKpnoOoMXAYgBgWiIYE0GpIiD VH8fNYBT4bdG2pa8UvBgbKJW76KJOEvvjzg5DxZbYAyWN/Du4KDVnYKRf A==; X-IronPort-AV: E=Sophos;i="5.49,404,1520870400"; d="scan'208";a="78256998" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 May 2018 06:51:32 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP; 15 May 2018 15:42:38 -0700 Received: from thinkpad-bart.sdcorp.global.sandisk.com ([10.111.70.1]) by uls-op-cesaip01.wdc.com with ESMTP; 15 May 2018 15:51:32 -0700 From: Bart Van Assche To: Jens Axboe Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, Christoph Hellwig , Bart Van Assche Subject: [PATCH v9 0/2] blk-mq: Rework blk-mq timeout handling again Date: Tue, 15 May 2018 15:51:22 -0700 Message-Id: <20180515225124.20428-4-bart.vanassche@wdc.com> X-Mailer: git-send-email 2.16.3 In-Reply-To: <20180515225124.20428-1-bart.vanassche@wdc.com> References: <20180515225124.20428-1-bart.vanassche@wdc.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello Jens, This is the ninth incarnation of the blk-mq timeout handling rework. All previously posted comments have been addressed. Please consider this patch series for inclusion in the upstream kernel. Bart. Changes compared to v8: - Split into two patches. - Moved the spin_lock_init() call from blk_mq_rq_ctx_init() into blk_mq_init_request(). - Fixed the deadline set by blk_add_timer(). - Surrounded the das_lock member with #ifndef CONFIG_ARCH_HAVE_CMPXCHG64 / #endif. Changes compared to v7: - Fixed the generation number mechanism. Note: with this patch applied the behavior of the block layer does not depend on the generation number. - Added more 32-bit architectures to the list of architectures on which cmpxchg64() should not be used. Changes compared to v6: - Used a union instead of bit manipulations to store multiple values into a single 64-bit field. - Reduced the size of the timeout field from 64 to 32 bits. - Made sure that the block layer still builds with this patch applied for the sh and mips architectures. - Fixed two sparse warnings that were introduced by this patch in the WRITE_ONCE() calls. Changes compared to v5: - Restored the synchronize_rcu() call between marking a request for timeout handling and the actual timeout handling to avoid that timeout handling starts while .queue_rq() is still in progress if the timeout is very short. - Only use cmpxchg() if another context could attempt to change the request state concurrently. Use WRITE_ONCE() otherwise. Changes compared to v4: - Addressed multiple review comments from Christoph. The most important are that atomic_long_cmpxchg() has been changed into cmpxchg() and also that there is now a nice and clean split between the legacy and blk-mq versions of blk_add_timer(). - Changed the patch name and modified the patch description because there is disagreement about whether or not the v4.16 blk-mq core can complete a single request twice. Kept the "Cc: stable" tag because of https://bugzilla.kernel.org/show_bug.cgi?id=199077. Changes compared to v3 (see also https://www.mail-archive.com/linux-block@vger.kernel.org/msg20073.html): - Removed the spinlock again that was introduced to protect the request state. v4 uses atomic_long_cmpxchg() instead. - Split __deadline into two variables - one for the legacy block layer and one for blk-mq. Changes compared to v2 (https://www.mail-archive.com/linux-block@vger.kernel.org/msg18338.html): - Rebased and retested on top of kernel v4.16. Changes compared to v1 (https://www.mail-archive.com/linux-block@vger.kernel.org/msg18089.html): - Removed the gstate and aborted_gstate members of struct request and used the __deadline member to encode both the generation and state information. Bart Van Assche (2): arch/*: Add CONFIG_ARCH_HAVE_CMPXCHG64 blk-mq: Rework blk-mq timeout handling again .../features/locking/cmpxchg64/arch-support.txt | 31 ++++ arch/Kconfig | 3 + arch/alpha/Kconfig | 1 + arch/arm/Kconfig | 1 + arch/arm64/Kconfig | 1 + arch/ia64/Kconfig | 1 + arch/m68k/Kconfig | 1 + arch/mips/Kconfig | 1 + arch/parisc/Kconfig | 1 + arch/powerpc/Kconfig | 1 + arch/s390/Kconfig | 1 + arch/sparc/Kconfig | 1 + arch/x86/Kconfig | 1 + arch/xtensa/Kconfig | 1 + block/blk-core.c | 6 - block/blk-mq-debugfs.c | 1 - block/blk-mq.c | 183 ++++++--------------- block/blk-mq.h | 117 ++++++++++--- block/blk-timeout.c | 95 ++++++----- block/blk.h | 14 +- include/linux/blkdev.h | 47 +++--- 21 files changed, 276 insertions(+), 233 deletions(-) create mode 100644 Documentation/features/locking/cmpxchg64/arch-support.txt -- 2.16.3