<div dir="auto">Bart,<div dir="auto"><br></div><div dir="auto">Do you have pending patches on this file you'd like to submit before I merge this l'indentation patch ?</div><div dir="auto"><br></div><div dir="auto">Regards,</div><div dir="auto">Christophe </div></div><div class="gmail_extra"><br><div class="gmail_quote">Le 4 août 2017 18:39, "Xose Vazquez Perez" <<a href="mailto:xose.vazquez@gmail.com" target="_blank">xose.vazquez@gmail.com</a>> a écrit :<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 06/22/2017 06:46 PM, Xose Vazquez Perez wrote:<br>
<br>
> Mainly running scripts/Lindent, from kernel dir, to replace indent spaces<br>
> by tabs.<br>
<br>
Patch missing in last merge.<br>
<br>
> Cc: Yang Feng <<a href="mailto:philip.yang@huawei.com">philip.yang@huawei.com</a>><br>
> Cc: Christophe Varoqui <<a href="mailto:christophe.varoqui@opensvc.com">christophe.varoqui@opensvc.<wbr>com</a>><br>
> Cc: device-mapper development <<a href="mailto:dm-devel@redhat.com">dm-devel@redhat.com</a>><br>
> Signed-off-by: Xose Vazquez Perez <<a href="mailto:xose.vazquez@gmail.com">xose.vazquez@gmail.com</a>><br>
> ---<br>
>  libmultipath/prioritizers/<wbr>path_latency.c | 354 +++++++++++++++---------------<wbr>-<br>
>  1 file changed, 177 insertions(+), 177 deletions(-)<br>
><br>
> diff --git a/libmultipath/prioritizers/<wbr>path_latency.c b/libmultipath/prioritizers/<wbr>path_latency.c<br>
> index 34b734b..9fc2dfc 100644<br>
> --- a/libmultipath/prioritizers/<wbr>path_latency.c<br>
> +++ b/libmultipath/prioritizers/<wbr>path_latency.c<br>
> @@ -17,8 +17,8 @@<br>
>   * Author(s): Yang Feng <<a href="mailto:philip.yang@huawei.com">philip.yang@huawei.com</a>><br>
>   *<br>
>   * This file is released under the GPL version 2, or any later version.<br>
> - *<br>
>   */<br>
> +<br>
>  #include <stdio.h><br>
>  #include <math.h><br>
>  #include <ctype.h><br>
> @@ -31,27 +31,28 @@<br>
><br>
>  #define pp_pl_log(prio, fmt, args...) condlog(prio, "path_latency prio: " fmt, ##args)<br>
><br>
> -#define MAX_IO_NUM              200<br>
> -#define MIN_IO_NUM              2<br>
> +#define MAX_IO_NUM           200<br>
> +#define MIN_IO_NUM           2<br>
><br>
> -#define MAX_BASE_NUM            10<br>
> -#define MIN_BASE_NUM            2<br>
> +#define MAX_BASE_NUM         10<br>
> +#define MIN_BASE_NUM         2<br>
><br>
> -#define MAX_AVG_LATENCY         100000000.  /*Unit: us*/<br>
> -#define MIN_AVG_LATENCY         1.          /*Unit: us*/<br>
> +#define MAX_AVG_LATENCY              100000000.      /* Unit: us */<br>
> +#define MIN_AVG_LATENCY              1.              /* Unit: us */<br>
><br>
> -#define DEFAULT_PRIORITY        0<br>
> +#define DEFAULT_PRIORITY     0<br>
><br>
> -#define MAX_CHAR_SIZE           30<br>
> +#define MAX_CHAR_SIZE                30<br>
><br>
> -#define USEC_PER_SEC            1000000LL<br>
> -#define NSEC_PER_USEC           1000LL<br>
> +#define USEC_PER_SEC         1000000LL<br>
> +#define NSEC_PER_USEC                1000LL<br>
><br>
>  static long long path_latency[MAX_IO_NUM];<br>
><br>
>  static inline long long timeval_to_us(const struct timespec *tv)<br>
>  {<br>
> -     return ((long long) tv->tv_sec * USEC_PER_SEC) + (tv->tv_nsec / NSEC_PER_USEC);<br>
> +     return ((long long)tv->tv_sec * USEC_PER_SEC) +<br>
> +         (tv->tv_nsec / NSEC_PER_USEC);<br>
>  }<br>
><br>
>  static int do_readsector0(int fd, unsigned int timeout)<br>
> @@ -60,198 +61,197 @@ static int do_readsector0(int fd, unsigned int timeout)<br>
>       unsigned char sbuf[SENSE_BUFF_LEN];<br>
>       int ret;<br>
><br>
> -     ret = sg_read(fd, &buf[0], 4096, &sbuf[0],<br>
> -                   SENSE_BUFF_LEN, timeout);<br>
> +     ret = sg_read(fd, &buf[0], 4096, &sbuf[0], SENSE_BUFF_LEN, timeout);<br>
><br>
>       return ret;<br>
>  }<br>
><br>
>  int check_args_valid(int io_num, int base_num)<br>
>  {<br>
> -    if ((io_num < MIN_IO_NUM) || (io_num > MAX_IO_NUM))<br>
> -    {<br>
> -        pp_pl_log(0, "args io_num is outside the valid range");<br>
> -        return 0;<br>
> -    }<br>
> -<br>
> -    if ((base_num < MIN_BASE_NUM) || (base_num > MAX_BASE_NUM))<br>
> -    {<br>
> -        pp_pl_log(0, "args base_num is outside the valid range");<br>
> -        return 0;<br>
> -    }<br>
> -<br>
> -    return 1;<br>
> +     if ((io_num < MIN_IO_NUM) || (io_num > MAX_IO_NUM)) {<br>
> +             pp_pl_log(0, "args io_num is outside the valid range");<br>
> +             return 0;<br>
> +     }<br>
> +<br>
> +     if ((base_num < MIN_BASE_NUM) || (base_num > MAX_BASE_NUM)) {<br>
> +             pp_pl_log(0, "args base_num is outside the valid range");<br>
> +             return 0;<br>
> +     }<br>
> +<br>
> +     return 1;<br>
>  }<br>
><br>
> -/* In multipath.conf, args form: io_num|base_num. For example,<br>
> -*  args is "20|10", this function can get io_num value 20, and<br>
> -   base_num value 10.<br>
> -*/<br>
> -static int get_ionum_and_basenum(char *args,<br>
> -                                 int *ionum,<br>
> -                                 int *basenum)<br>
> +/*<br>
> + * In multipath.conf, args form: io_num|base_num. For example,<br>
> + * args is "20|10", this function can get io_num value 20, and<br>
> + * base_num value 10.<br>
> + */<br>
> +static int get_ionum_and_basenum(char *args, int *ionum, int *basenum)<br>
>  {<br>
> -    char source[MAX_CHAR_SIZE];<br>
> -    char vertica = '|';<br>
> -    char *endstrbefore = NULL;<br>
> -    char *endstrafter = NULL;<br>
> -    unsigned int size = strlen(args);<br>
> -<br>
> -    if ((args == NULL) || (ionum == NULL) || (basenum == NULL))<br>
> -    {<br>
> -        pp_pl_log(0, "args string is NULL");<br>
> -        return 0;<br>
> -    }<br>
> -<br>
> -    if ((size < 1) || (size > MAX_CHAR_SIZE-1))<br>
> -    {<br>
> -        pp_pl_log(0, "args string's size is too long");<br>
> -        return 0;<br>
> -    }<br>
> -<br>
> -    memcpy(source, args, size+1);<br>
> -<br>
> -    if (!isdigit(source[0]))<br>
> -    {<br>
> -        pp_pl_log(0, "invalid prio_args format: %s", source);<br>
> -        return 0;<br>
> -    }<br>
> -<br>
> -    *ionum = (int)strtoul(source, &endstrbefore, 10);<br>
> -    if (endstrbefore[0] != vertica)<br>
> -    {<br>
> -        pp_pl_log(0, "invalid prio_args format: %s", source);<br>
> -        return 0;<br>
> -    }<br>
> -<br>
> -    if (!isdigit(endstrbefore[1]))<br>
> -    {<br>
> -        pp_pl_log(0, "invalid prio_args format: %s", source);<br>
> -        return 0;<br>
> -    }<br>
> -<br>
> -    *basenum = (long long)strtol(&endstrbefore[1], &endstrafter, 10);<br>
> -    if (check_args_valid(*ionum, *basenum) == 0)<br>
> -    {<br>
> -        return 0;<br>
> -    }<br>
> -<br>
> -    return 1;<br>
> +     char source[MAX_CHAR_SIZE];<br>
> +     char vertica = '|';<br>
> +     char *endstrbefore = NULL;<br>
> +     char *endstrafter = NULL;<br>
> +     unsigned int size = strlen(args);<br>
> +<br>
> +     if ((args == NULL) || (ionum == NULL) || (basenum == NULL)) {<br>
> +             pp_pl_log(0, "args string is NULL");<br>
> +             return 0;<br>
> +     }<br>
> +<br>
> +     if ((size < 1) || (size > MAX_CHAR_SIZE - 1)) {<br>
> +             pp_pl_log(0, "args string's size is too long");<br>
> +             return 0;<br>
> +     }<br>
> +<br>
> +     memcpy(source, args, size + 1);<br>
> +<br>
> +     if (!isdigit(source[0])) {<br>
> +             pp_pl_log(0, "invalid prio_args format: %s", source);<br>
> +             return 0;<br>
> +     }<br>
> +<br>
> +     *ionum = (int)strtoul(source, &endstrbefore, 10);<br>
> +     if (endstrbefore[0] != vertica) {<br>
> +             pp_pl_log(0, "invalid prio_args format: %s", source);<br>
> +             return 0;<br>
> +     }<br>
> +<br>
> +     if (!isdigit(endstrbefore[1])) {<br>
> +             pp_pl_log(0, "invalid prio_args format: %s", source);<br>
> +             return 0;<br>
> +     }<br>
> +<br>
> +     *basenum = (long long)strtol(&endstrbefore[1], &endstrafter, 10);<br>
> +     if (check_args_valid(*ionum, *basenum) == 0) {<br>
> +             return 0;<br>
> +     }<br>
> +<br>
> +     return 1;<br>
>  }<br>
><br>
> -long long calc_standard_deviation(long long *path_latency, int size, long long avglatency)<br>
> +long long calc_standard_deviation(long long *path_latency, int size,<br>
> +                               long long avglatency)<br>
>  {<br>
> -    int index;<br>
> -    long long total = 0;<br>
> +     int index;<br>
> +     long long total = 0;<br>
><br>
> -    for (index = 0; index < size; index++)<br>
> -    {<br>
> -        total += (path_latency[index] - avglatency) * (path_latency[index] - avglatency);<br>
> -    }<br>
> +     for (index = 0; index < size; index++) {<br>
> +             total +=<br>
> +                 (path_latency[index] - avglatency) * (path_latency[index] -<br>
> +                                                       avglatency);<br>
> +     }<br>
><br>
> -    total /= (size-1);<br>
> +     total /= (size - 1);<br>
><br>
> -    return (long long)sqrt((double)total);<br>
> +     return (long long)sqrt((double)total);<br>
>  }<br>
><br>
> -int calcPrio(double avglatency, double max_avglatency, double min_avglatency, double base_num)<br>
> +int calcPrio(double avglatency, double max_avglatency, double min_avglatency,<br>
> +          double base_num)<br>
>  {<br>
> -    double lavglatency = log(avglatency)/log(base_num);<br>
> -    double lmax_avglatency = log(max_avglatency)/log(base_<wbr>num);<br>
> -    double lmin_avglatency = log(min_avglatency)/log(base_<wbr>num);<br>
> +     double lavglatency = log(avglatency) / log(base_num);<br>
> +     double lmax_avglatency = log(max_avglatency) / log(base_num);<br>
> +     double lmin_avglatency = log(min_avglatency) / log(base_num);<br>
><br>
> -    if (lavglatency <= lmin_avglatency)<br>
> -        return (int)(lmax_avglatency + 1.);<br>
> +     if (lavglatency <= lmin_avglatency)<br>
> +             return (int)(lmax_avglatency + 1.);<br>
><br>
> -    if (lavglatency > lmax_avglatency)<br>
> -        return 0;<br>
> +     if (lavglatency > lmax_avglatency)<br>
> +             return 0;<br>
><br>
> -    return (int)(lmax_avglatency - lavglatency + 1.);<br>
> +     return (int)(lmax_avglatency - lavglatency + 1.);<br>
>  }<br>
><br>
>  /* Calc the latency interval corresponding to the average latency */<br>
>  long long calc_latency_interval(double avglatency, double max_avglatency,<br>
> -                                double min_avglatency, double base_num)<br>
> +                             double min_avglatency, double base_num)<br>
>  {<br>
> -    double lavglatency = log(avglatency)/log(base_num);<br>
> -    double lmax_avglatency = log(max_avglatency)/log(base_<wbr>num);<br>
> -    double lmin_avglatency = log(min_avglatency)/log(base_<wbr>num);<br>
> -<br>
> -    if ((lavglatency <= lmin_avglatency)<br>
> -        || (lavglatency > lmax_avglatency))<br>
> -        return 0;/* Invalid value */<br>
> -<br>
> -    if ((double)((int)lavglatency) == lavglatency)<br>
> -        return (long long)(avglatency - (avglatency / base_num));<br>
> -    else<br>
> -        return (long long)(pow(base_num, (double)((int)lavglatency + 1))<br>
> -            - pow(base_num, (double)((int)lavglatency)));<br>
> +     double lavglatency = log(avglatency) / log(base_num);<br>
> +     double lmax_avglatency = log(max_avglatency) / log(base_num);<br>
> +     double lmin_avglatency = log(min_avglatency) / log(base_num);<br>
> +<br>
> +     if ((lavglatency <= lmin_avglatency)<br>
> +         || (lavglatency > lmax_avglatency))<br>
> +             return 0;       /* Invalid value */<br>
> +<br>
> +     if ((double)((int)lavglatency) == lavglatency)<br>
> +             return (long long)(avglatency - (avglatency / base_num));<br>
> +     else<br>
> +             return (long long)(pow(base_num, (double)((int)lavglatency + 1))<br>
> +                                - pow(base_num, (double)((int)lavglatency)));<br>
>  }<br>
><br>
> -int getprio (struct path *pp, char *args, unsigned int timeout)<br>
> +int getprio(struct path *pp, char *args, unsigned int timeout)<br>
>  {<br>
> -    int rc, temp;<br>
> -    int index = 0;<br>
> -    int io_num;<br>
> -    int base_num;<br>
> -    long long avglatency;<br>
> -    long long latency_interval;<br>
> -    long long standard_deviation;<br>
> -    long long toldelay = 0;<br>
> -    long long before, after;<br>
> -    struct timespec tv;<br>
> -<br>
> -    if (pp->fd < 0)<br>
> -        return -1;<br>
> -<br>
> -    if (get_ionum_and_basenum(args, &io_num, &base_num) == 0)<br>
> -    {<br>
> -        pp_pl_log(0, "%s: get path_latency args fail", pp->dev);<br>
> -        return DEFAULT_PRIORITY;<br>
> -    }<br>
> -<br>
> -    memset(path_latency, 0, sizeof(path_latency));<br>
> -<br>
> -    temp = io_num;<br>
> -    while (temp-- > 0)<br>
> -    {<br>
> -        (void)clock_gettime(CLOCK_<wbr>MONOTONIC, &tv);<br>
> -        before = timeval_to_us(&tv);<br>
> -<br>
> -        if (do_readsector0(pp->fd, timeout) == 2)<br>
> -        {<br>
> -            pp_pl_log(0, "%s: path down", pp->dev);<br>
> -            return -1;<br>
> -        }<br>
> -<br>
> -        (void)clock_gettime(CLOCK_<wbr>MONOTONIC, &tv);<br>
> -        after = timeval_to_us(&tv);<br>
> -<br>
> -        path_latency[index] = after - before;<br>
> -        toldelay += path_latency[index++];<br>
> -    }<br>
> -<br>
> -    avglatency = toldelay/(long long)io_num;<br>
> -    pp_pl_log(4, "%s: average latency is (%lld us)", pp->dev, avglatency);<br>
> -<br>
> -    if (avglatency > MAX_AVG_LATENCY)<br>
> -    {<br>
> -        pp_pl_log(0, "%s: average latency (%lld us) is outside the thresold (%lld us)",<br>
> -            pp->dev, avglatency, (long long)MAX_AVG_LATENCY);<br>
> -        return DEFAULT_PRIORITY;<br>
> -    }<br>
> -<br>
> -    /* Min average latency and max average latency are constant, the args base_num<br>
> -    set can change latency_interval value corresponding to avglatency and is not constant.<br>
> -    Warn the user if latency_interval is smaller than (2 * standard_deviation), or equal */<br>
> -    standard_deviation = calc_standard_deviation(path_<wbr>latency, index, avglatency);<br>
> -    latency_interval = calc_latency_interval(<wbr>avglatency, MAX_AVG_LATENCY, MIN_AVG_LATENCY, base_num);<br>
> -    if ((latency_interval!= 0)<br>
> -        && (latency_interval <= (2 * standard_deviation)))<br>
> -        pp_pl_log(3, "%s: latency interval (%lld) according to average latency (%lld us) is smaller than "<br>
> -            "2 * standard deviation (%lld us), or equal, args base_num (%d) needs to be set bigger value",<br>
> -            pp->dev, latency_interval, avglatency, standard_deviation, base_num);<br>
> -<br>
> -    rc = calcPrio(avglatency, MAX_AVG_LATENCY, MIN_AVG_LATENCY, base_num);<br>
> -    return rc;<br>
> +     int rc, temp;<br>
> +     int index = 0;<br>
> +     int io_num;<br>
> +     int base_num;<br>
> +     long long avglatency;<br>
> +     long long latency_interval;<br>
> +     long long standard_deviation;<br>
> +     long long toldelay = 0;<br>
> +     long long before, after;<br>
> +     struct timespec tv;<br>
> +<br>
> +     if (pp->fd < 0)<br>
> +             return -1;<br>
> +<br>
> +     if (get_ionum_and_basenum(args, &io_num, &base_num) == 0) {<br>
> +             pp_pl_log(0, "%s: get path_latency args fail", pp->dev);<br>
> +             return DEFAULT_PRIORITY;<br>
> +     }<br>
> +<br>
> +     memset(path_latency, 0, sizeof(path_latency));<br>
> +<br>
> +     temp = io_num;<br>
> +     while (temp-- > 0) {<br>
> +             (void)clock_gettime(CLOCK_<wbr>MONOTONIC, &tv);<br>
> +             before = timeval_to_us(&tv);<br>
> +<br>
> +             if (do_readsector0(pp->fd, timeout) == 2) {<br>
> +                     pp_pl_log(0, "%s: path down", pp->dev);<br>
> +                     return -1;<br>
> +             }<br>
> +<br>
> +             (void)clock_gettime(CLOCK_<wbr>MONOTONIC, &tv);<br>
> +             after = timeval_to_us(&tv);<br>
> +<br>
> +             path_latency[index] = after - before;<br>
> +             toldelay += path_latency[index++];<br>
> +     }<br>
> +<br>
> +     avglatency = toldelay / (long long)io_num;<br>
> +     pp_pl_log(4, "%s: average latency is (%lld us)", pp->dev, avglatency);<br>
> +<br>
> +     if (avglatency > MAX_AVG_LATENCY) {<br>
> +             pp_pl_log(0,<br>
> +                       "%s: average latency (%lld us) is outside the thresold (%lld us)",<br>
> +                       pp->dev, avglatency, (long long)MAX_AVG_LATENCY);<br>
> +             return DEFAULT_PRIORITY;<br>
> +     }<br>
> +<br>
> +     /*<br>
> +      * Min average latency and max average latency are constant, the args<br>
> +      * base_num set can change latency_interval value corresponding to<br>
> +      * avglatency and is not constant.<br>
> +      * Warn the user if latency_interval is smaller than (2 * standard_deviation),<br>
> +      * or equal.<br>
> +      */<br>
> +     standard_deviation =<br>
> +         calc_standard_deviation(path_<wbr>latency, index, avglatency);<br>
> +     latency_interval =<br>
> +         calc_latency_interval(<wbr>avglatency, MAX_AVG_LATENCY, MIN_AVG_LATENCY,<br>
> +                               base_num);<br>
> +     if ((latency_interval != 0)<br>
> +         && (latency_interval <= (2 * standard_deviation)))<br>
> +             pp_pl_log(3,<br>
> +                       "%s: latency interval (%lld) according to average latency (%lld us) is smaller than "<br>
> +                       "2 * standard deviation (%lld us), or equal, args base_num (%d) needs to be set bigger value",<br>
> +                       pp->dev, latency_interval, avglatency,<br>
> +                       standard_deviation, base_num);<br>
> +<br>
> +     rc = calcPrio(avglatency, MAX_AVG_LATENCY, MIN_AVG_LATENCY, base_num);<br>
> +     return rc;<br>
>  }<br>
><br>
<br>
</blockquote></div></div>