From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (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 789ED351C27 for ; Fri, 10 Jul 2026 10:16:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783678574; cv=none; b=vA9kGczFj5f57C/S/QI6AmZPHJFXzYCzJkWAnbpxlV1/ogqhzzA9mHvMnp+vqwjY4qhOhq6+vvcVhSMhvgt4bcbkFsvAF58zPFv2mJGYP5FTG3klrgm1aInEU5rLJlnHrxlhwmUX+P54V9GQrb4Ytt8ZPe89hEoejbNwWjqd5/k= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783678574; c=relaxed/simple; bh=1tlFjz/cCmyQHjce8cSURjPwovVmOpmqfVBATU2ybJU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z1pzjBb8KvM6htXCsqDHQoc75sJbtasCAqn55ZWdd1wH7JA/reKEhtgJxkQGo5FC6RXrht5xkiG0weAJR3FrnZuQzaLApaZXiHLx1Gg7aQ39rGW0uRpH7zSrEyKVShlWUiC9CHnaLsfEeX8PL2BCSE5bHr61qaMxRCmbNqDSmfo= 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=kyIjCGeB; arc=none smtp.client-ip=209.85.128.44 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="kyIjCGeB" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-493b7612475so5891985e9.3 for ; Fri, 10 Jul 2026 03:16:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783678570; x=1784283370; 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:content-type; bh=l+6lrXW8MRgVUIlREriBzz+n9VJVDvmnQ2y2tzCDScM=; b=kyIjCGeB1zBW5vz1gqUGl2qoA5isRqdNsvYuqt+VzTpEk8q1SfdRCcyzd7o9qP5lDj 40exawOwB9P4WtAQOmKourc9VlJ40jJqkRgkvZfxNUSdKfv0Gz8soKjnPjVDPSbPjW4s 1Gav4QxEQ4R2BvH/9RKa7EY8tX46IYYsTKdx2fdyjouPL1FPvmmyoCvNd3GbArXkFMBg /VXIe+Yncexy3hsdCRSeeSo2lt+roq/VcHo2yGgg30QXnk4JL68568kLKWc249pPuZ6f Ak1zdYiOrTJceYUgIkjUDtfIhxwd3qG8CuQ4CeBkEO86yjkL2iijk3Y4nDybDYEAH3bc uLog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783678570; x=1784283370; 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:content-type; bh=l+6lrXW8MRgVUIlREriBzz+n9VJVDvmnQ2y2tzCDScM=; b=QKeUJI7QV2WpEZsOZjn1XGa+EdHG3JVnf3PtOWue7tECH23cdfoY2LV/yU9LsBnSug DEK08Zb1EkfDt5RMBIv30MEbG5lgc+wiEaM8XZcKmk+Lpz7CJqxrZ/z/ySNspPloEK51 U9GehaT9uXojrfg/jvkkkNEBmqFYKEzQHEJRDACRflLOcpt3rOBjLWM4z5slzCpTxKU3 wq/tkm6i5FqkbfikjF5CyTE8Ysmx3j6PafE/CscmBGErkev586go5yYV9WPJXufUSeo4 CiFzEYIm41TENR5ufupm3jexQ9U6AnDb/+b5js2xKefLobwZ1eIGBR70GENn2Sl5Juk2 5opA== X-Forwarded-Encrypted: i=1; AHgh+RpcbJpfQrrSF9Ka/n5mwrAcs/+OBHUckuNJx0CmpCMRGNhuQc5tlshRwEckS/tuBDdbK5rYeLdc8n+C7fI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/ek6qICOvNHWSB3LdzVQ7CgdIS7jne5nHp2TIq0SRUCtMmuax CNBe6TA5kl7eVx3Pf9Yk1+LZHYuLIOgFp1q8tEd+QtiJGHNjsXJ0qKR5 X-Gm-Gg: AfdE7cnlskr7AfS59K1NrZ/vU/jLOtWFNfihtQ2dDywkdgR2ldvwaY0g23nPEckDABi JuZI6qBqIcqcni3nma7v5Wp6yNGy3/4rs4bA3fLdk6VD8P/Fqr2F6HIRTP7UiiwG2IYiyaZMhcM Bfj/PlXdMZgP5rRg8L0QZn6QElTePUx8nl9b4+PV88IWYRjEDCTk0c3aApld+cWdA1bh02x1Sgi lzwJnVm1j7CSeSzootVj6CTV5TMp39vmRho0UheXFpKRKnl3QEqAMPhbMHeAK83mSr5sz4hvJy0 GVPNI+3hnHBeviuONucKCSn3nVa0/t//qDHBfN4Mk4cVzSmqx4XvPE+3W7OSl8i8YhVZJXEpqwp ihKlAF8/zwe9A3UfX0wONyBrwDIYV25uy8D+PyUj3o7tqgkbJLnOB2/FHTE+qz8DNuI5gQmzA39 mI6bSCREu0HdYSIpSI+pngiZmdxMpcI/TkH3wWfr6JZTDUGtTX9iHrsDmM8IvMcJDGIQEvwibO1 UQ= X-Received: by 2002:a05:600c:c3cf:10b0:493:f0f5:f2db with SMTP id 5b1f17b1804b1-493f0f5f3aemr32432155e9.22.1783678569482; Fri, 10 Jul 2026 03:16:09 -0700 (PDT) Received: from yocto.. (dynamic-176-007-199-185.176.7.pool.telefonica.de. [176.7.199.185]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-493eb670a41sm123554875e9.0.2026.07.10.03.16.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 03:16:08 -0700 (PDT) From: Abd-Alrhman Masalkhi To: song@kernel.org, yukuai@fygo.io, magiclinan@didiglobal.com, xiao@kernel.org, axboe@kernel.dk, vverma@digitalocean.com, john.g.garry@oracle.com, martin.petersen@oracle.com, abd.masalkhi@gmail.com, linux-kernel@vger.kernel.org Cc: linux-raid@vger.kernel.org Subject: [PATCH v4 3/7] md/raid10: consistently fail atomic writes that require splitting Date: Fri, 10 Jul 2026 10:15:17 +0000 Message-ID: <20260710101521.1714-4-abd.masalkhi@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710101521.1714-1-abd.masalkhi@gmail.com> References: <20260710101521.1714-1-abd.masalkhi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit RAID10 currently handles one badblock path explicitly by failing atomic writes with EIO. However, another badblock path can also reduce the writable range and force the bio through bio_submit_split_bioset(), which implicitly completes the bio with EINVAL. Fix this by handling atomic writes in the common split check. If RAID10 determines that an atomic write would require splitting, complete the bio with EIO. Fixes: a1d9b4fd42d9 ("md/raid10: Atomic write support") Signed-off-by: Abd-Alrhman Masalkhi --- Changes in v4: - No changes. - Link to v3: https://lore.kernel.org/linux-raid/20260708101341.473750-4-abd.masalkhi@gmail.com/ Changes in v3: - No changes. - Link to v2: https://lore.kernel.org/linux-raid/20260628142420.1051027-4-abd.masalkhi@gmail.com/ Changes in v2: - Drop the early atomic write split check from raid10_write_request() and rely on queue limits instead. - Link to v1: https://lore.kernel.org/linux-raid/20260623072456.333437-4-abd.masalkhi@gmail.com/ --- drivers/md/raid10.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index bd322eccdc3f..3480fc7907f0 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -1356,6 +1356,7 @@ static bool raid10_write_request(struct mddev *mddev, struct bio *bio, int i, k; sector_t sectors; int max_sectors; + bool atomic = bio->bi_opf & REQ_ATOMIC; if ((mddev_is_clustered(mddev) && mddev->cluster_ops->area_resyncing(mddev, WRITE, @@ -1464,16 +1465,6 @@ static bool raid10_write_request(struct mddev *mddev, struct bio *bio, if (is_bad) { int good_sectors; - /* - * We cannot atomically write this, so just - * error in that case. It could be possible to - * atomically write other mirrors, but the - * complexity of supporting that is not worth - * the benefit. - */ - if (bio->bi_opf & REQ_ATOMIC) - goto err_handle; - good_sectors = first_bad - dev_sector; if (good_sectors < max_sectors) max_sectors = good_sectors; @@ -1493,6 +1484,9 @@ static bool raid10_write_request(struct mddev *mddev, struct bio *bio, r10_bio->sectors = max_sectors; if (r10_bio->sectors < bio_sectors(bio)) { + if (atomic) + goto err_handle; + allow_barrier(conf); bio = bio_submit_split_bioset(bio, r10_bio->sectors, &conf->bio_split); -- 2.43.0