Am 20.11.25 um 2:21 PM schrieb Fabian Grünbichler:
> On November 20, 2025 11:17 am, Fiona Ebner wrote:
>> @@ -1141,14 +1135,29 @@ my sub volume_snapshot_rollback_locked {
>>  sub volume_snapshot_rollback {
>>      my ($class, $scfg, $storeid, $volname, $snap) = @_;
>>  
>> -    return $class->cluster_lock_storage(
>> -        $storeid,
>> -        $scfg->{shared},
>> -        undef,
>> -        sub {
>> -            return volume_snapshot_rollback_locked($class, $scfg, $storeid, 
>> $volname, $snap);
>> -        },
>> -    );
>> +    my $cleanup_worker;
>> +
>> +    eval {
>> +        $class->cluster_lock_storage(
>> +            $storeid,
>> +            $scfg->{shared},
>> +            undef,
>> +            sub {
>> +                volume_snapshot_rollback_locked(
>> +                    $class, $scfg, $storeid, $volname, $snap, 
>> \$cleanup_worker,
>> +                );
>> +            },
>> +        );
>> +    };
>> +    my $err = $@;
>> +
>> +    # Spawn outside of the locked section, because with 'saferemove', the 
>> cleanup worker also needs
>> +    # to obtain the lock, and in CLI context, it will be awaited 
>> synchronously, see fork_worker().
>> +    fork_cleanup_worker($cleanup_worker);
> 
> I mean, this just worked because the forked cleanup sub waited long
> enough by chance for the lock/before acquiring the lock to allow the
> parent to release it in the non-CLI case, right? i.e., it was still
> wrong, because volume_snapshot_rollback_locked might have done more work
> after forking the cleanup worker while still holding the lock.. 

Yes, that is true.

> all the other code paths here have this pattern:
> 
> my $cleanup_worker = eval { lock and do something };
> fork_cleanup_worker($cleanup_worker)
> 
> which is exactly what this patch switches to, so consider this
> 
> Reviewed-by: Fabian Grünbichler <[email protected]>

Thanks for the review!


_______________________________________________
pve-devel mailing list
[email protected]
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to