From nobody Sun Jun 14 04:09:15 2026 Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) (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 E9B3113E02A for ; Mon, 4 May 2026 03:26:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777865163; cv=none; b=WsI0JTm9LgI+mkd8xXOdwVHfTCHUVNqVV9BWPWI6/2T8XXjuGezPUZMb79bIhIdqUHFYHSSsAjCwivKOOq3IZFeodSt1gC/j0nITzUQwr1YMJBYPw99cPViEiNIrqecOn1ckK9S6cjXeAB5uXQps4vKOHThMjNew57c8ifCTC28= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777865163; c=relaxed/simple; bh=lgP9nc8xg9Hh45JT0BP15Lj2a1lG76uxk3hmVagthBQ=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=kh1vDE0NhaWd2hdLCZUpRXeZVz/+2fYe8oQjxjJXH3Uh9LGnUbMD9xmDVT/T51fgWTEaCbiMek5hLTYb6vpD5cSVXm5+cFH/dne0LecRpBvi6ql1i0BPBhldFYqdwUtiQiOnLPf7nPlv6+hIhcqfVrcwM74ftHFY74KmUbWMINI= 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=dH9rAMT5; arc=none smtp.client-ip=209.85.210.180 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="dH9rAMT5" Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-83538fcdda8so38490b3a.3 for ; Sun, 03 May 2026 20:26:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777865161; x=1778469961; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=sHXTY9sLnF1K25ZmkWpIUiO8YMQuEQwzanxq/iB+EKM=; b=dH9rAMT5jvlx9Mn25Ar6ztuF/W2gRAIoOf8LbbDWJRuMXJkHF0KbDUaZbUMmsENnLa +QsKdtXpNoKAquRpq+Tp+wxWoOZRxFAX47VEAoZKtVM+TANvGKEbH604izdq3Q5qblEr YR8ImQQYhqh8lUSmcXBWM9A/aUAv1mGZ7b6rybOgFGv3bqvfJVLwEIbA0TdRNnk4/h8o djjY8AI88hVYtT6M6NdsfIRwwYr8bu1vVz1KbA9yjj3eSPocspU8lw7gsN0Nf0veWGV2 TlTBUd5I4DPLmfnrTqctNXbN3cn5YsaFcXWR4GPI/pYF0SpsPPMyxDX3AzQ/DH2MScV+ Jueg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777865161; x=1778469961; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=sHXTY9sLnF1K25ZmkWpIUiO8YMQuEQwzanxq/iB+EKM=; b=LRSUH7v2xKWZQqdwsDi23n/9VSQrDE22GIxQTUifFG5ZWLCuDnqHV5eQPRVihBCWlZ 9szJA0SxChlf4NzXIEfkULIwhmUlnTuoiZw85q4baRh5GEunwyHCDsYpCAToj7HVJSl5 AxvB/8XwnYIPXJ4c5roI2HaGqgjtNKDjEtYg0o8Fm3nwlvNledB1ntpc0gXNeonjSMY2 +BN55LKXMOxtcotLE8KnetfUqE1Wdi5s7yC6A38SeolU7VMIm98iClGqhNkfKuoTbAzy Om6uTOqV4zN/0McbBf/ahns8MXMWEq3T0kCi2DafUDkJC2a2AP7ngluiBzWlbHkz7Svi cw2A== X-Forwarded-Encrypted: i=1; AFNElJ8vKdFHW7923Tiq2HgGTIQZ5ZNKulN8RYAk7KSPzwpPUsVxdp4BoIVgPynOiMSr338p1MaBK/5nCo+4/cI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx1n4OXGCpVtqJFRiT7fRA2PrUV/68FocubeDXoFp7pB82p7Tkg STxdwZ4vm+80CXYRSdQaopO1Ns7RBEFFQVi0GQuqJYPerCQs3+fw6EgZ X-Gm-Gg: AeBDietdca1KwUcwHA9aG3Ay/AmoNz4sQt7R7UfM0Bv3yS4sQzTEK0Z5b+0svMD3Fnn CQruTixXlQjH/ssM3z99s484IRfbIlj6rIZzpwI9ZHBF3PUdFVxGTD7R38r+Rn35R2PhGd7LO8T 3hPMPlFGsDbqRAOgGVgqRc+zjzf/VUqapdBWdx8MMn6+e14FA6bctEyIVI7jhbAMwUAZtlCqItw /0LuoFu49QklYw7TbVmnHtqiv+hXH5N4cq7ECeokH9UnSTmLOCn3/DgO3V6kNrMsuYOH2L1nrq5 bA9sA1fBhiqbWTE4iABe9eh+JZS3uv5z+FMApAeu6DgjncNxQ7wcfM+JNSEUUAPgLEsw77fi8Vn eytAA8xLehDzJaPijm10S9mTgcFtKz54GjNUmXqCqAdtwEEffJqjm0BMvGbJ9nGdfW6gph03JC2 lTMfQ1nTiENA7bEyRXTMN7bJQvVr8vpa57aWKVkKoSmQ== X-Received: by 2002:a05:6a00:1490:b0:835:45bf:965a with SMTP id d2e1a72fcca58-83545bf98a7mr2082260b3a.7.1777865161249; Sun, 03 May 2026 20:26:01 -0700 (PDT) Received: from b330-MS-7D46.. ([122.192.219.205]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-83515acfbb5sm10165651b3a.34.2026.05.03.20.25.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 May 2026 20:26:00 -0700 (PDT) From: Ziyu Zhang To: philipp.reisner@linbit.com, lars.ellenberg@linbit.com, christoph.boehmwalder@linbit.com Cc: axboe@kernel.dk, drbd-dev@lists.linbit.com, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, baijiaju1990@gmail.com, r33s3n6@gmail.com, gality369@gmail.com, zhenghaoran154@gmail.com, hanguidong02@gmail.com, zzzccc427@gmail.com, Ziyu Zhang Subject: [PATCH] drbd: serialize UUID snapshot in drbd_md_write() Date: Mon, 4 May 2026 11:25:50 +0800 Message-ID: <20260504032550.706749-1-ziyuzhang201@gmail.com> X-Mailer: git-send-email 2.43.0 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" drbd_md_write() copies device->ldev->md.uuid[] into the on-disk metadata block without holding uuid_lock. The write-side helpers drbd_uuid_new_current() and drbd_uuid_set_bm() update md.uuid[] under uuid_lock, and some updates span multiple UUID slots as one logical state transition. An unlocked drbd_md_write() can therefore observe and persist a mixed UUID tuple assembled from two different states. This is problematic because the serialized UUID tuple is written to stable storage and later consumed by reconnect and resync decision logic, meaning an inconsistent on-disk snapshot can represent a state that never existed atomically in memory. Protect the UUID copy with uuid_lock so drbd_md_write() serializes one coherent snapshot. Fixes: b411b3637fa7 ("The DRBD driver") Signed-off-by: Ziyu Zhang --- drivers/block/drbd/drbd_main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index a9e49b212..6f835dd05 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -3004,13 +3004,17 @@ void drbd_md_write(struct drbd_device *device, void= *b) { struct meta_data_on_disk *buffer =3D b; sector_t sector; + unsigned long flags; int i; =20 memset(buffer, 0, sizeof(*buffer)); =20 buffer->la_size_sect =3D cpu_to_be64(get_capacity(device->vdisk)); + /* Serialize the UUID tuple as one coherent snapshot. */ + spin_lock_irqsave(&device->ldev->md.uuid_lock, flags); for (i =3D UI_CURRENT; i < UI_SIZE; i++) buffer->uuid[i] =3D cpu_to_be64(device->ldev->md.uuid[i]); + spin_unlock_irqrestore(&device->ldev->md.uuid_lock, flags); buffer->flags =3D cpu_to_be32(device->ldev->md.flags); buffer->magic =3D cpu_to_be32(DRBD_MD_MAGIC_84_UNCLEAN); =20 --=20 2.43.0