Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp4718265imm; Mon, 14 May 2018 11:47:12 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrgiJlcVMh9MPYrPuQGk3t07CWL7Ruqy3EfOLKDePhWvJUaZXvwgTvtuSAnAHWPpIlUc1MS X-Received: by 2002:a63:794d:: with SMTP id u74-v6mr1143706pgc.328.1526323632783; Mon, 14 May 2018 11:47:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526323632; cv=none; d=google.com; s=arc-20160816; b=WYidiR7TroazFiy+5z9C3AiQBxujw9KPpTvzw9menY+nWGIl6F4mPBkdDSev4VEnfI fsuBbtP9T2DGiMh2XKWAxy3nWPk2dtHp58lpXZQ/8ySwtiMzks7hWCr4d/L/DdvAqGDT Jm0OmbRA/cTxol7cr+H4J4BkcCuRF2JTKLrZ947Tbc1Wza2ZZpqQmDLXDJzUx+b17GA5 jiFiIiQfVfTVZNc3v4T3tin0BVJzr1xWooNOOkwnIZwusfyaq5qwTHALdrr8uSKa08o4 LyjVWMtys1vn2S91vbU7ow0Rvbkiy7OnKzd8qKXW16YSuzW03s5/hR3XYLOUn9ueqHUI c5ZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=JpW3qb6FjO5h7ScLXAoXMrJJRWtCSn12UvByEZoxQSo=; b=ZojUNcalCCVZnpmYnoURl9hOo/bSkahOGFvxjPWcWDEOPWbzB+UTlUg/5sr7BU9GUE VyGK3EAlr7BVuOiv3uw5P/4q0kr93TEHoksinBcJoAFRZOzVo2tPDBQX6RB2ZJeAbF1+ cRzYeNR48okrmdqOsOK7PmymZjGDyeb/YboxBAfFgwDtWRYpOrOmW0ZkcK75lQfWBwKg SW9w5+RK7RtDVcE4JiMkJwSd7wRisZCqThrOjPStFnbU/RW5CPCwfAeHoG1+OUE2aWM6 9bGLt+Iw7N9Vk6lzOMzJkgNlamO9zw/VJcFIWNdlJ4C8PRZYDmrQ2TDb02N8097dAP2U lsQw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=Kvw3Ox0N; 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 i64-v6si9986013pli.274.2018.05.14.11.46.57; Mon, 14 May 2018 11:47:12 -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=Kvw3Ox0N; 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 S1752072AbeENSqi (ORCPT + 99 others); Mon, 14 May 2018 14:46:38 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:65200 "EHLO esa5.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751596AbeENSqg (ORCPT ); Mon, 14 May 2018 14:46:36 -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=1526323596; x=1557859596; h=from:to:cc:subject:date:message-id; bh=RNdWitnLsrKzUVI1iX+vOqzLBZRBd1UP5X+kgghtBGM=; b=Kvw3Ox0NJJnyL9K/+KUfAqm9dlni57tXK0iKQNmUM024Aocfbrg1guDD YRacVwhMjlyEjILcUM+il3+gh/NQl/cojkkRZveEhwCg3f5TPkgo5T/aW Z5jYJvnpJ0VWaMb/ejGSTbHHrXxTtJ5KoTursapp0g+LyIywiQzXCpZmH xE4GfQV+/JHhVb7PI69gP7JT2+Q1gsuRWDWmFE68ibk79WrOqIRpY9PU9 r43uaZyNHx8JJqm6Wm7Uhh/CRL7ZBSJzAhyAdjv8mZtPiwh1XgJr/nqBz LxogSzQUk6l3iNk02xr/BAofkVDJAlB8cGiBLaRdDDX51lTvEur1sd07J A==; X-IronPort-AV: E=Sophos;i="5.49,401,1520870400"; d="scan'208";a="78141224" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 15 May 2018 02:46:36 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP; 14 May 2018 11:37:46 -0700 Received: from thinkpad-bart.sdcorp.global.sandisk.com ([10.111.70.1]) by uls-op-cesaip01.wdc.com with ESMTP; 14 May 2018 11:46:35 -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: Mon, 14 May 2018 11:46:32 -0700 Message-Id: <20180514184634.2160-1-bart.vanassche@wdc.com> X-Mailer: git-send-email 2.16.3 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