From b9562f1816723e5eca5b836f454a7d7edeed0b7b Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Tue, 6 Jan 2026 09:18:44 +0100 Subject: [PATCH] fix(drbd): use actual device path in res file during toggle-disk When a diskless resource is being converted to diskful via toggle-disk, the res file generator was still outputting "disk none" because it only checked isDrbdDiskless() which returns true until the operation completes. This caused drbdadm adjust to fail because the res file didn't reflect the actual storage device that was already created by the storage layer. Add check for DISK_ADD_REQUESTED/DISK_ADDING flags to use the actual device path when toggle-disk operation is in progress. Co-Authored-By: Claude Signed-off-by: Andrei Kvapil --- .../linbit/linstor/layer/drbd/resfiles/ConfFileBuilder.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/satellite/src/main/java/com/linbit/linstor/layer/drbd/resfiles/ConfFileBuilder.java b/satellite/src/main/java/com/linbit/linstor/layer/drbd/resfiles/ConfFileBuilder.java index 862bfca99..91314add2 100644 --- a/satellite/src/main/java/com/linbit/linstor/layer/drbd/resfiles/ConfFileBuilder.java +++ b/satellite/src/main/java/com/linbit/linstor/layer/drbd/resfiles/ConfFileBuilder.java @@ -894,12 +894,16 @@ private void appendVlmIfPresent(DrbdVlmData vlmData, AccessContext loc if (((Volume) vlmData.getVolume()).getFlags().isUnset(localAccCtx, Volume.Flags.DELETE)) { final String disk; + // Check if we're in toggle-disk operation (adding disk to diskless resource) + boolean isDiskAdding = vlmData.getVolume().getAbsResource().getStateFlags().isSomeSet( + localAccCtx, Resource.Flags.DISK_ADD_REQUESTED, Resource.Flags.DISK_ADDING); if ((!isPeerRsc && vlmData.getDataDevice() == null) || (isPeerRsc && // FIXME: vlmData.getRscLayerObject().getFlags should be used here vlmData.getVolume().getAbsResource().disklessForDrbdPeers(accCtx) ) || - (!isPeerRsc && + // For toggle-disk: if dataDevice is set and we're adding disk, use the actual device + (!isPeerRsc && !isDiskAdding && // FIXME: vlmData.getRscLayerObject().getFlags should be used here vlmData.getVolume().getAbsResource().isDrbdDiskless(accCtx) )