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

Reply via email to