Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp1213855imm; Tue, 15 May 2018 15:53:30 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoSLUJdrsMt5tfXYgcaxlcZjuKHU0J9A4d9tfRtHAuT+Lz4JqGR8xhDZM0gy0X+826dzk76 X-Received: by 2002:a62:a48:: with SMTP id s69-v6mr17065178pfi.134.1526424810653; Tue, 15 May 2018 15:53:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526424810; cv=none; d=google.com; s=arc-20160816; b=C/6yHIx1d5fY42l72CsJksCI1h2jdh/yjdacJUKwInHDymqiv0i0WqD578k85NtEm/ IO2mdaqOxf+IKa6xLTUAf9TQ4sSIxVdfWsJSggpQ7gH4KsUWsMI/TR4jas0jgyTKbO5m AusEyoODTwzhL1sRK0z8GsQy0GbwLppMtdrgHNSKxkL5JnfLzxqX055+gaDfUCqfQQ3+ 7J3pHhNNgYuxO/DxuyOY/HDYH4YtyWS3nrGYf4WBw3ZSYwPQvlBeZbFTqv4x2SFZ3j1N wBDke4P72Gp3yGujtPXC8wZf7DE8Xcf3tAtXfnzBiZN2PvjpLUoKTKEuvKHNfQomR6mp 8E5A== 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=j2YVGdkX6WqxNoW2N0jqtbSXZXDkoaVSwYfNKG+YAIQ=; b=RrD0qCXyD9EvyFoJ3djccmXtIo0L3UbbXa2SKrYnF8L71zrKJ0FqTYlfHbaTSJ0DhM 1Wv+3HzQYU+nsOdMJHPMD+BosktwyC4okUbLWD3rh/YoqhNL15RfsqqJpVjRsY3wNdej BbQiZG0FbHUARg3xNZm3UsK08sxxwH0+gYZigJTGy1W11of8UIkR9/kR+zOHMK5ckz6n 744BQBKbkurfLGLm7Ncm9hBF+Y19xqAUfOKp2dEWdH0j/ejGefA0lEqHK4xl1ALfyJ+T SwOwF5H8PbH1aVeoC82Yxngaf4sRoI+oS9moZE1eHBqTUS7CN3b7WagKbGvsfHOIOJYk lrSg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=Mr/9JFM7; 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 g77-v6si1080546pfa.304.2018.05.15.15.53.16; Tue, 15 May 2018 15:53:30 -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=Mr/9JFM7; 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 S1752237AbeEOWvc (ORCPT + 99 others); Tue, 15 May 2018 18:51:32 -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 S1751099AbeEOWva (ORCPT ); Tue, 15 May 2018 18:51:30 -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=1526424691; x=1557960691; h=from:to:cc:subject:date:message-id; bh=WmxAOUgk9/WdEFNOL23ou//1TRBDQ9bw6Z0BWm1tryY=; b=Mr/9JFM7NgMEXC402D2ktviOx5pYyHyBUDmDxCNF8TYHQ/I2ceNxgINu GxD0thOXzBMhfSS3Hi7Ijw0c3OBdikIuuhvC69bW3sNpax+4G66M21DlP PcWUqkrb7R+Ee4T/U1CW0xCwAlpDoJ77r3DGsuQyIZKG72DaFf/Ryu2Sz YBEPUQ3lSHXy4FlVnImFUAyOjb6wh6Y38NOax+il5sHP8ScCC0XrnGsem pQf5IoqGcoBr0u5ZpzU0mPrM8mf3qLh467/thYWewQq1NAe4Jc+WwBARp NrSq2V2ayxQEWWKJG2mb6zZU9/Wc2N2c3qXEsyS0rCaOBdWwdmLTViGGj w==; X-IronPort-AV: E=Sophos;i="5.49,404,1520870400"; d="scan'208";a="78256992" 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:30 +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:36 -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:30 -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 v10 0/2] blk-mq: Rework blk-mq timeout handling again Date: Tue, 15 May 2018 15:51:19 -0700 Message-Id: <20180515225124.20428-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 tenth incarnation of the blk-mq timeout handling rework. All previously posted comments should have been addressed. Please consider this patch series for inclusion in the upstream kernel. Bart. Changes compared to v9: - Addressed multiple comments related to patch 1/2: added CONFIG_ARCH_HAVE_CMPXCHG64 for riscv, modified features/locking/cmpxchg64/arch-support.txt as requested and made the order of the symbols in the arch/*/Kconfig alphabetical where possible. 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 | 33 ++++ 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/riscv/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 +++--- 22 files changed, 279 insertions(+), 233 deletions(-) create mode 100644 Documentation/features/locking/cmpxchg64/arch-support.txt -- 2.16.3