On 12/8/25 11:31, Peter Krempa wrote: > On Mon, Dec 08, 2025 at 11:26:20 +0100, Michal Prívozník wrote: >> On 12/1/25 15:25, Peter Krempa via Devel wrote: >>> From: Peter Krempa <[email protected]> >>> >>> The current logic in 'qemuTPMEmulatorBuildCommand' skips all setup if >>> the *location* of the data is on what we'd consider shared storage. >>> >>> This means that if the location is not actually shared (e.g. it's shared >>> betweeh some other hosts than the two doing the migration) and the path >>> wasn't ever used (e.g. by migrating out) from the host where we're >>> migrating into the complete setup of the location would be skipped even >>> when it doesn't exist. >>> >>> Fix the logic by skipping only some of the setup steps so that >>> 'qemuTPMEmulatorCreateStorage' can still create the storage if it >>> doesn't exist. >>> >>> The rest of the code then needs to take the 'created' flag returned from >>> 'qemuTPMEmulatorCreateStorage' into account. >>> >>> Fixes: 68103e9daf633b789428fedef56f816c92f6ee75 >>> Signed-off-by: Peter Krempa <[email protected]> >>> --- >>> src/qemu/qemu_tpm.c | 26 +++++++++++++++++--------- >>> 1 file changed, 17 insertions(+), 9 deletions(-) >>> >>> diff --git a/src/qemu/qemu_tpm.c b/src/qemu/qemu_tpm.c >>> index 4c9445d72c..1ce6390fd5 100644 >>> --- a/src/qemu/qemu_tpm.c >>> +++ b/src/qemu/qemu_tpm.c >>> @@ -158,6 +158,7 @@ qemuTPMEmulatorGetPid(const char *swtpmStateDir, >>> /** >>> * qemuTPMEmulatorCreateStorage: >>> * @tpm: TPM definition for an emulator type >>> + * @sharedStorageMigration: VM is being migrated with possibly shared >>> storage >>> * @created: a pointer to a bool that will be set to true if the >>> * storage was created because it did not exist yet >>> * @swtpm_user: The uid that needs to be able to access the directory >>> @@ -169,6 +170,7 @@ qemuTPMEmulatorGetPid(const char *swtpmStateDir, >>> */ >>> static int >>> qemuTPMEmulatorCreateStorage(virDomainTPMDef *tpm, >>> + bool sharedStorageMigration, >>> bool *created, >>> uid_t swtpm_user, >>> gid_t swtpm_group) >>> @@ -187,8 +189,14 @@ qemuTPMEmulatorCreateStorage(virDomainTPMDef *tpm, >>> *created = false; >>> >>> if (!virFileExists(source_path) || >>> - virDirIsEmpty(source_path, true) > 0) >>> + virDirIsEmpty(source_path, true) > 0) { >>> *created = true; >>> + } else { >>> + /* If the location exists and is shared, we don't need to create it >>> + * during migration */ >>> + if (sharedStorageMigration) >> >> Can you please put a short VIR_DEBUG("Skipping TPM creation due to >> shared storage migration"); here? Or something among those lines. I feel >> this is something we might find useful later when reading logs from a >> migration. > > You're right this might come in handy. How about: > > 'Skipping TPM storage creation. Path '%s' already exists and is on shared > storage.' > > So that the specific case is known without grepping the code? >
Sounds perfect! Michal
