Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp561421ybg; Wed, 3 Jun 2020 07:53:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyzZzYwlw6hZUBkV6ByDtSydkDbvJUzfVK0XSZow4myiqe2wvszqJ8Pd+xc3f4LxhJ/6/v7 X-Received: by 2002:a05:6402:1d89:: with SMTP id dk9mr19314268edb.275.1591196025806; Wed, 03 Jun 2020 07:53:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591196025; cv=none; d=google.com; s=arc-20160816; b=NJjQLpataNC5zrIKJyrHRjyWxcC8YHLOAQRm+f73pyvb7q97KUZqdb+mLJA6fg0WS6 Mq70377oicDfL1zoLqa4b8OYzeAW9HknExvXr6skNxj/qBoxx0vkxD5JuQOGSyAC/SHy QcltOXQQ3+0xLRlh3CGdpKuhANCvfcPIwNXvqcIPK8BLHmYe2BJgSyWLGgF2pLRhhfqM gxw+txREMr968fy2+hxLgJWIGon6gqX+znUtTPiToohy7mMN2MQsg6fNb74BTHXJ+4uF 0JVYQRIP4c/axj9z8X1QY5X0eALL/6leQe+E5X3tWItN8Awqd4XuGBk9dSKEznCFBkf4 WNKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=lhuTY6oOVBH6+KAaeX8lstY1k/grQgDI5kvo0OJsmz4=; b=w1nfjf7I0hH3Y80kev8TxAre5Riab1PWghbEhXoHYI+BisGUGsuSTCofVe6aNYUCoO aP3rb3NFpZvVi2s+kkDi7fZZRWm1tWLSXs+koShP0ojdvnGaXoqgVn7EA0F+AjZiSeoH 5pW1A0vY2VhXmU6P15bjsgNDl03+8GDAKcbSxxAM2Xgj7tBrG0X/+UIzotmhgrmo2Yh9 oBK+flf/AWnb8wy1VgEnu0LmI0kjid8l7Iz8B8FkQtSWWmzoI9simolOdq85J4gDQnel ePMAWcNmFiyYW3NXhWTTmS69IQIAdOLIA+/xH35V3+yVQdOlRJOeLV0H8wNqA/JIDpf7 eTHQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 94si1089893edm.445.2020.06.03.07.53.23; Wed, 03 Jun 2020 07:53:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726666AbgFCOur (ORCPT + 99 others); Wed, 3 Jun 2020 10:50:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726462AbgFCOuX (ORCPT ); Wed, 3 Jun 2020 10:50:23 -0400 Received: from Galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F0772C08C5C1; Wed, 3 Jun 2020 07:50:22 -0700 (PDT) Received: from [5.158.153.53] (helo=debian-buster-darwi.lab.linutronix.de.) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1jgUie-0001zr-3o; Wed, 03 Jun 2020 16:50:16 +0200 From: "Ahmed S. Darwish" To: Peter Zijlstra , Ingo Molnar , Will Deacon Cc: Thomas Gleixner , "Paul E. McKenney" , "Sebastian A. Siewior" , Steven Rostedt , LKML , "Ahmed S. Darwish" , Jens Axboe , Vivek Goyal , linux-block@vger.kernel.org Subject: [PATCH v2 5/6] block: nr_sects_write(): Disable preemption on seqcount write Date: Wed, 3 Jun 2020 16:49:48 +0200 Message-Id: <20200603144949.1122421-6-a.darwish@linutronix.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200603144949.1122421-1-a.darwish@linutronix.de> References: <20200603144949.1122421-1-a.darwish@linutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org For optimized block readers not holding a mutex, the "number of sectors" 64-bit value is protected from tearing on 32-bit architectures by a sequence counter. Disable preemption before entering that sequence counter's write side critical section. Otherwise, the read side can preempt the write side section and spin for the entire scheduler tick. If the reader belongs to a real-time scheduling class, it can spin forever and the kernel will livelock. Fixes: c83f6bf98dc1 ("block: add partition resize function to blkpg ioctl") Cc: Signed-off-by: Ahmed S. Darwish Reviewed-by: Sebastian Andrzej Siewior --- block/blk.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/block/blk.h b/block/blk.h index 0a94ec68af32..151f86932547 100644 --- a/block/blk.h +++ b/block/blk.h @@ -470,9 +470,11 @@ static inline sector_t part_nr_sects_read(struct hd_struct *part) static inline void part_nr_sects_write(struct hd_struct *part, sector_t size) { #if BITS_PER_LONG==32 && defined(CONFIG_SMP) + preempt_disable(); write_seqcount_begin(&part->nr_sects_seq); part->nr_sects = size; write_seqcount_end(&part->nr_sects_seq); + preempt_enable(); #elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPTION) preempt_disable(); part->nr_sects = size; -- 2.20.1