From nobody Mon Dec 1 23:05:29 2025 Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1668327B34D for ; Sat, 29 Nov 2025 09:01:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764406911; cv=none; b=mqMaprjffyqiKROH5U1ha5kJuEr3TK8V/ACh6nETpz1OS5/3FIpRkt2xNwxaB2HngLxjYyV/pSP9rvM4DnCSFpaAsyTGxmVI4KvrUjF7dL6N3OMpYMqy1vF56EipHVgH8+rHSY1KNeMyiKe0PV/uzg/kE6EeXyD2U9Z21UT1+fI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764406911; c=relaxed/simple; bh=b80xEn7EdjxWTN/ci1ysQxp/kAR6AhTP55Nuwyj6diA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=l8e9ZtKzBKj7hqZugGy3PtWNACa6Rh4h1tnHZuEv5cL+I5obH9yeacHQFh4NPxh6ws9aPttF1W0N77cBToaFtQOirvSGVUuh8Qv0o509FcrKDCQCnlOZDCTH4E62JsOHzXpIaIf0avA7o/p+iUXrswz8UzhW1HDCwc80VPay7Wo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QiV5+N+K; arc=none smtp.client-ip=209.85.210.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QiV5+N+K" Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-7aad4823079so2259989b3a.0 for ; Sat, 29 Nov 2025 01:01:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764406909; x=1765011709; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1fxHcLru6xJPrGlRM61sm3BLmSBVukho7BhSnyNPRbc=; b=QiV5+N+K8rvRLBeotMRxe/ceAipnmm4/K5XqUM9OFWx31hIlK6IZHh5SfP6vTbIT3z Z+HDEC8rJrsSImM8J/c3LXbLeMkemS5zgfgijEuileBY7KOVDiMbG5dSZYXtpkuV38is dXgCZD8NV0h3nnw/ZdQhxhkVbwOLDCAvObTBfh9MxNTN+js7T6IUtvvtL+lBf4h1xFyi sZHodfUm50tGwTYUEMPTjRJ1JrzOGkXJ+AMJ1viFrI0uBKsOI4WI/bkgqn7nFOFQ2ifn uDArfq6uqsHHo8Ts8Yna3i45vAnZ7mqN9kaEXwvif4nYBAq/6KE/UlXA8mR/DZaGWX8D rF0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764406909; x=1765011709; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=1fxHcLru6xJPrGlRM61sm3BLmSBVukho7BhSnyNPRbc=; b=UWvUoay4YwjdsaRfBXw3tF4WPyG+soOFqjFJcGD2q0Lqrang1ehCzOk2gSAUVh2RxG ko96OfTd97LpmB0k6o0IBRuIMgnNQ2A0mPuJj/m06B8IrbCVvnw/HR37+iwPmNOtLX/h a/vee0lk3LOF09eQ3KoyUegdeqhZ4Hp/sCCVh7CQv8MG2FmWuQCFAYG9FuN+L8akDoiS diXQI2BJqJa1ARUHs46GdMOZrhv6QsNg2ZR288clAPVEKVdNziHdPRHuWDM96LlhTLvw /xIzQE4vP5+gFSp5RAyjP+rkB9Q/qjRqbXb4OLlkq41JfDotoI4YxsUmMM0lLg1OipqN NeTg== X-Forwarded-Encrypted: i=1; AJvYcCULg7ESba1tYCD7NfuAkY4b9cku+MgaFzR+HgtPX7XSYxF8VRnaEYAIUZrjmlDZHxFhG9viFZ2otjwe6go=@vger.kernel.org X-Gm-Message-State: AOJu0Yyxv37x3Uycn376XE4C/g5qJfe2xsoZ0gZa1ITd4muzt/cM1JgC unl9krJlHRG9JVVfYe3PoareEgD/Hz1w27sVW5ilpRYQVJ36SN/qHZMT X-Gm-Gg: ASbGnctR9TOJWIBFcX8wWU7TFKmtkqm4VvbdvCQtaS7bJtnrbPCCcVwRpNr5lSphB/M zh27q6hNrweLuCaKlKPAB5HnYXNZhBIPU3xH9H8lHO881WY/6ImeeXfHnD8vowGK1V1UP2c3ro7 7EgoYDyrwgi2SjrhMJhTbDWs+SpWp67JWOIV/ydRyHM7jIy6xeJoB3p34x0BAh5C53yyQlFKZot voWPosPMR4iL4FJnex39pBwG+s6irZSElCaaEHYI/dMInGOzHqM0hLS9vMB3z7PHOu9yEY6SOvM bpg0MvjntGRclkX8aasRuAtWaPw/eANcGjw4DBQ1ZS1a+y/fZkWVVSyXZFRBKhr2m+CHkd0KzxS 6zpF6SWiCt7JUDKfliBPFMXmCXISzcLCEJFjc+ZOdwIkeqf8SFpqPQevvMJI7uqjRMcvImHcoDG csds2QeAofO+ADg5uqvNwPl4w3Wg== X-Google-Smtp-Source: AGHT+IFEuvilLkDJGqcsWwCIedr283xueadWd1RQPKrotWNJSiN6yvq7rXU8DgdpE+SxH743dNudrQ== X-Received: by 2002:a05:7022:221a:b0:11a:2698:87c8 with SMTP id a92af1059eb24-11c9d710498mr16125897c88.1.1764406909336; Sat, 29 Nov 2025 01:01:49 -0800 (PST) Received: from localhost.localdomain ([104.128.72.44]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-11dcae73bedsm28114394c88.0.2025.11.29.01.01.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 29 Nov 2025 01:01:48 -0800 (PST) From: zhangshida X-Google-Original-From: zhangshida To: Johannes.Thumshirn@wdc.com, hch@infradead.org, agruenba@redhat.com, ming.lei@redhat.com, hsiangkao@linux.alibaba.com, csander@purestorage.com Cc: linux-block@vger.kernel.org, linux-bcache@vger.kernel.org, nvdimm@lists.linux.dev, virtualization@lists.linux.dev, ntfs3@lists.linux.dev, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, zhangshida@kylinos.cn, starzhangzsd@gmail.com Subject: [PATCH v3 3/9] block: prevent race condition on bi_status in __bio_chain_endio Date: Sat, 29 Nov 2025 17:01:16 +0800 Message-Id: <20251129090122.2457896-4-zhangshida@kylinos.cn> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20251129090122.2457896-1-zhangshida@kylinos.cn> References: <20251129090122.2457896-1-zhangshida@kylinos.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Shida Zhang Andreas point out that multiple completions can race setting bi_status. The check (parent->bi_status) and the subsequent write are not an atomic operation. The value of parent->bi_status could have changed between the time you read it for the if check and the time you write to it. So we use cmpxchg to fix the race, as suggested by Christoph. Suggested-by: Andreas Gruenbacher Suggested-by: Christoph Hellwig Suggested-by: Caleb Sander Mateos Signed-off-by: Shida Zhang Reviewed-by: Christoph Hellwig --- block/bio.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/block/bio.c b/block/bio.c index 1b5e4577f4c..097c1cd2054 100644 --- a/block/bio.c +++ b/block/bio.c @@ -314,8 +314,9 @@ static struct bio *__bio_chain_endio(struct bio *bio) { struct bio *parent =3D bio->bi_private; =20 - if (bio->bi_status && !parent->bi_status) - parent->bi_status =3D bio->bi_status; + if (bio->bi_status) + cmpxchg(&parent->bi_status, 0, bio->bi_status); + bio_put(bio); return parent; } --=20 2.34.1