On Thu, 2025-07-10 at 14:10 -0400, Benjamin Marzinski wrote:
> If none of the threads succeeds in issuing the release, simply return
> failure, instead of trying the workaround.
> 
> Signed-off-by: Benjamin Marzinski <bmarz...@redhat.com>
> ---
>  libmpathpersist/mpath_persist_int.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/libmpathpersist/mpath_persist_int.c
> b/libmpathpersist/mpath_persist_int.c
> index 7fb08b2e..ad5a4ee7 100644
> --- a/libmpathpersist/mpath_persist_int.c
> +++ b/libmpathpersist/mpath_persist_int.c
> @@ -475,15 +475,21 @@ static int mpath_prout_rel(struct multipath
> *mpp,int rq_servact, int rq_scope,
>               }
>       }
>  
> +     rc = MPATH_PR_DMMP_ERROR;

I find the relationship between "status" and "rc" a bit confusing in
this patch. Can we use something like "bool all_failed" instead?

Martin


>       for (i = 0; i < count; i++){
>               /*  check thread status here and return the status
> */
>  
> -             if (thread[i].param.status ==
> MPATH_PR_RESERV_CONFLICT)
> +             if (thread[i].param.status == MPATH_PR_SUCCESS)
> +                     rc = MPATH_PR_SUCCESS;
> +             else if (thread[i].param.status ==
> MPATH_PR_RESERV_CONFLICT)
>                       status = MPATH_PR_RESERV_CONFLICT;
> -             else if (status == MPATH_PR_SUCCESS
> -                             && thread[i].param.status !=
> MPATH_PR_RESERV_CONFLICT)
> +             else if (status == MPATH_PR_SUCCESS)
>                       status = thread[i].param.status;
>       }
> +     if (rc != MPATH_PR_SUCCESS) {
> +             condlog(0, "%s: all threads failed to release
> reservation.", mpp->wwid);
> +             return status;
> +     }
>  
>       status = mpath_prin_activepath (mpp, MPATH_PRIN_RRES_SA,
> &resp, noisy);
>       if (status != MPATH_PR_SUCCESS){

Reply via email to