> On 25 Feb 2026, at 3:02 PM, Markus Armbruster <[email protected]> wrote:
> 
> Daniel P. Berrangé <[email protected]> writes:
> 
>> On Wed, Feb 25, 2026 at 11:35:15AM +0530, Prasad Pandit wrote:
>>> On Wed, 25 Feb 2026 at 09:23, Ani Sinha <[email protected]> wrote:
>>>> Currently the code that adds a migration blocker does not check if the same
>>>> blocker already exists. Return an EEXIST error code if there is an attempt 
>>>> to
>>>> add the same migration blocker again. This way the same migration blocker 
>>>> will
>>>> not get added twice.
>>>> 
>>>> Suggested-by: Prasad Pandit <[email protected]>
>>>> Signed-off-by: Ani Sinha <[email protected]>
>>>> ---
>>>> migration/migration.c | 4 ++++
>>>> 1 file changed, 4 insertions(+)
>>>> 
>>>> diff --git a/migration/migration.c b/migration/migration.c
>>>> index a5b0465ed3..1eb75fb7fb 100644
>>>> --- a/migration/migration.c
>>>> +++ b/migration/migration.c
>>>> @@ -1702,6 +1702,10 @@ static int add_blockers(Error **reasonp, unsigned 
>>>> modes, Error **errp)
>> 
>> This method has an  '**errp' parameter.....
>> 
>>>> {
>>>>     for (MigMode mode = 0; mode < MIG_MODE__MAX; mode++) {
>>>>         if (modes & BIT(mode)) {
>>>> +            if (g_slist_index(migration_blockers[mode],
>>>> +                                 *reasonp) >= 0) {
>>>> +                return -EEXIST;
>> 
>> .... so using  -errno for return values is not appropriate - it must
>> set 'errp' and return -1.
> 
> Yes, it must set @errp on failure.  Returning -1 would be wrong,

Ok so just

diff --git a/migration/migration.c b/migration/migration.c
index 1eb75fb7fb..dc75d2eeb6 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1704,6 +1704,8 @@ static int add_blockers(Error **reasonp, unsigned modes, 
Error **errp)
         if (modes & BIT(mode)) {
             if (g_slist_index(migration_blockers[mode],
                                  *reasonp) >= 0) {
+                error_propagate_prepend(errp, *reasonp,
+                                        "migration blocker already added ");
                 return -EEXIST;
             }
             migration_blockers[mode] = 
g_slist_prepend(migration_blockers[mode],


> because:
> 
>    int migrate_add_blocker_modes(Error **reasonp, unsigned modes, Error 
> **errp)
>    {
>        if (is_only_migratable(reasonp, modes, errp)) {
>            return -EACCES;
>        } else if (is_busy(reasonp, errp)) {
>            return -EBUSY;
>        }
>        return add_blockers(reasonp, modes, errp);
>    }
> 
> If callers don't actually care for error codes, the entire nest of
> functions could be simplified to return 0/-1 or true/false.
> 
>>>> +            }
>>>>             migration_blockers[mode] = 
>>>> g_slist_prepend(migration_blockers[mode],
>>>>                                                        *reasonp);
>>>>         }
>>> 
>>> * Looks okay.
>>> Reviewed-by: Prasad Pandit <[email protected]>
>>> 
>>> Thank you.
>>> ---
>>>  - Prasad
>>> 
>>> 
>> 
>> With regards,
>> Daniel



Reply via email to