[dm-devel] [PATCH v2 8/9] libmultipath: split set_int to enable reuse

Martin Wilck martin.wilck at suse.com
Thu Nov 11 11:52:44 UTC 2021


On Wed, 2021-11-10 at 19:06 -0600, Benjamin Marzinski wrote:
> Split the code that does the actual value parsing out of set_int(),
> into
> a helper function, do_set_int(), so that it can be used by other
> handlers. These functions no longer set the config value at all, when
> they have invalid input.
> 
> Signed-off-by: Benjamin Marzinski <bmarzins at redhat.com>

I have to apologize. 

My review on the v1 of this patch suggested that a value like "0   "
was possible in the setter functions in dict.c. I double-checked the
parser code, and that was wrong. The parser already strips trailing
whitespace. We actually have a test for that in tests/parser.c
(test04).

So, I have to say I actually prefer the v1, which was leaner and worked
just as well as this one. My concern was that you didn't set any value
(relying on the previously-set default), but you've convinced me that
that was ok.

So, if you don't mind, I'll put my "Reviewed-by" on the v1 of this
patch.

Regards,
Martin

> ---
>  libmultipath/dict.c | 92 ++++++++++++++++++++++++++-----------------
> --
>  1 file changed, 54 insertions(+), 38 deletions(-)
> 
> diff --git a/libmultipath/dict.c b/libmultipath/dict.c
> index 1b4e1106..3212d14c 100644
> --- a/libmultipath/dict.c
> +++ b/libmultipath/dict.c
> 
> ...
>  int
> @@ -1230,6 +1238,7 @@ declare_mp_snprint(pgfailback,
> print_pgfailback)
>  static int
>  no_path_retry_helper(vector strvec, void *ptr, const char *file, int
> line_nr)
>  {
> +       int rc = 0;
>         int *int_ptr = (int *)ptr;
>         char * buff;
>  
> @@ -1237,15 +1246,18 @@ no_path_retry_helper(vector strvec, void
> *ptr, const char *file, int line_nr)
>         if (!buff)
>                 return 1;
>  
> -       if (!strcmp(buff, "fail") || !strcmp(buff, "0"))
> +       if (!strcmp(buff, "fail"))
>                 *int_ptr = NO_PATH_RETRY_FAIL;
>         else if (!strcmp(buff, "queue"))
>                 *int_ptr = NO_PATH_RETRY_QUEUE;
> -       else if ((*int_ptr = atoi(buff)) < 1)
> -               *int_ptr = NO_PATH_RETRY_UNDEF;
> +       else {
> +               rc = do_set_int(strvec, ptr, 0, INT_MAX, file,
> line_nr, buff);
> +               if (rc == 0 && *int_ptr == 0)
> +                       *int_ptr = NO_PATH_RETRY_FAIL;
> +       }
>  




>         FREE(buff);
> -       return 0;
> +       return rc;
>  }
>  
>  int
> @@ -1387,6 +1399,7 @@ snprint_mp_reservation_key (struct config
> *conf, struct strbuf *buff,
>  static int
>  set_off_int_undef(vector strvec, void *ptr, const char *file, int
> line_nr)
>  {
> +       int rc =0;
>         int *int_ptr = (int *)ptr;
>         char * buff;
>  
> @@ -1394,13 +1407,16 @@ set_off_int_undef(vector strvec, void *ptr,
> const char *file, int line_nr)
>         if (!buff)
>                 return 1;
>  
> -       if (!strcmp(buff, "no") || !strcmp(buff, "0"))
> +       if (!strcmp(buff, "no"))
>                 *int_ptr = NU_NO;
> -       else if ((*int_ptr = atoi(buff)) < 1)
> -               *int_ptr = NU_UNDEF;
> +       else {
> +               rc = do_set_int(strvec, ptr, 0, INT_MAX, file,
> line_nr, buff);
> +               if (rc == 0 && *int_ptr == 0)
> +                       *int_ptr = NU_NO;
> +       }
>  
>         FREE(buff);
> -       return 0;
> +       return rc;
>  }
>  
>  int





More information about the dm-devel mailing list