Received: by 2002:a17:90a:bc8d:0:0:0:0 with SMTP id x13csp2414851pjr; Tue, 19 May 2020 14:49:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwp0AH3RgnoSP82qi0LjtRYoaVCms+dfk0E/oM+fzYafNWLDb+LIwZUPxjN++H9xEyTgJnF X-Received: by 2002:aa7:d3d6:: with SMTP id o22mr745809edr.359.1589924944504; Tue, 19 May 2020 14:49:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589924944; cv=none; d=google.com; s=arc-20160816; b=JRxM3JRCjr6AYEDDFNyARSQRIHsNTtnDSB/aLFvU3Vt+OCGzwUA60EeaWrL1N0O0rK yhAINNDE5alITGzhZON/QodaPFiL1PGCfhPzuQwXOrgSPKQ54g2D+30e3h4pwh+kykCt JzWMgVZNPzh/jBkJDwMKFemQaPpyREXB7R+oHsqgMWjBafx53sxDQa1NrVXL0Mob1H/9 D+JmT1cEN5xR6nBmHOJ/VwUofo7Y2+x5aeELKqNOWZdAqhGxxQHk5d5cQboDNvXklNVp aw0DSK8gxHU01TEyU0f6m09MoOw5/gSCX58so/6KK+bQT8BXOExp3smL+2Hwcdxlu4s5 4Vjg== 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=ngZP70vrED7PCzbyIsc3stGrAsPYcfxJqZafkZ3pVLor2UPHoLdMw8mVnTNRDW25qX DSbKkIqnGajG7ywSyLdhUPo51P4QidCQcqCrD2vVwp4eYfp3rVMkrbigwuZwZf3K7SCx H43S6/A4fMVbUHTndxCwMEw4SXb9XVD0Rgtv7hMo6Q8X6yB9TgEn1+PPVLrTWLmXhpWt pfZUmp5nJFu2cMwBS0K2mxTCJ4oUBC97ldZjULd3J5jFdvCwQ/6tPo1YCeQUnSs27gxI deQio+9tQtlIBJa4ESYXpaw7ohPI5h7RUCXywbyZ5Qhu8NVrrMqOc73oUq7Lc+bx1k5E F8jA== 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 e9si384142edv.392.2020.05.19.14.48.41; Tue, 19 May 2020 14:49:04 -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 S1728177AbgESVqr (ORCPT + 99 others); Tue, 19 May 2020 17:46:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40816 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726030AbgESVqr (ORCPT ); Tue, 19 May 2020 17:46:47 -0400 Received: from Galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 50AADC08C5C0; Tue, 19 May 2020 14:46:47 -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 1jbA3s-0002cK-Vy; Tue, 19 May 2020 23:46:09 +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 , Phillip Susi , Vivek Goyal , linux-block@vger.kernel.org Subject: [PATCH v1 04/25] block: nr_sects_write(): Disable preemption on seqcount write Date: Tue, 19 May 2020 23:45:26 +0200 Message-Id: <20200519214547.352050-5-a.darwish@linutronix.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200519214547.352050-1-a.darwish@linutronix.de> References: <20200519214547.352050-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