On 2/26/16, 11:00 AM, "Benjamin Marzinski" <bmarz...@redhat.com> wrote:

>On Fri, Feb 26, 2016 at 02:25:08AM +0000, Shiva Krishna wrote:
>> --- 
>>  libmultipath/propsel.c |    2 +-
>>  libmultipath/structs.h |    1 +
>>  multipathd/main.c      |   19 ++++++++++++++++---
>>  3 files changed, 18 insertions(+), 4 deletions(-)
>> 
>> diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c
>> index f64d5e4..b9e389f 100644
>> --- a/libmultipath/propsel.c
>> +++ b/libmultipath/propsel.c
>> @@ -374,7 +374,7 @@ detect_prio(struct path * pp)
>>      int ret;
>>      struct prio *p = &pp->prio;
>>  
>> -    if (get_target_port_group_support(pp->fd) <= 0)
>> +    if ((pp->tpgs = get_target_port_group_support(pp->fd)) <= 0)
>>              return;
>>      ret = get_target_port_group(pp->fd);
>>      if (ret < 0)
>
>Again, setting this in detect_prio will make this useless for all
>devices that don't use detect_prio. After the "out:" label in
>select_prio, you can check if the alua prioritizer is being used,
>and set this there.
Thanks Ben, Hannes for the comments. I hesitated to put alua specific
checks in select_prio. Also, this condition is specific to targets
which support alua and implicit tpgs mode. Hence creating a config
option might not be necessary. I will post an updated patch with the
suggested change.
> 
>
>-Ben
>
>> diff --git a/libmultipath/structs.h b/libmultipath/structs.h
>> index 5f68a8e..ef5fb7e 100644
>> --- a/libmultipath/structs.h
>> +++ b/libmultipath/structs.h
>> @@ -193,6 +193,7 @@ struct path {
>>      int detect_prio;
>>      int watch_checks;
>>      int wait_checks;
>> +    int tpgs;
>>      char * uid_attribute;
>>      char * getuid;
>>      struct prio prio;
>> diff --git a/multipathd/main.c b/multipathd/main.c
>> index 04f6d02..b6b0053 100644
>> --- a/multipathd/main.c
>> +++ b/multipathd/main.c
>> @@ -62,6 +62,7 @@ static int use_watchdog;
>>  #include <pgpolicies.h>
>>  #include <uevent.h>
>>  #include <log.h>
>> +#include "prioritizers/alua_rtpg.h"
>>  
>>  #include "main.h"
>>  #include "pidfile.h"
>> @@ -1161,6 +1162,7 @@ check_path (struct vectors * vecs, struct path *
>>pp)
>>      int new_path_up = 0;
>>      int chkr_new_path_up = 0;
>>      int add_active;
>> +    int ignore_reinstate = 0;
>>      int oldchkrstate = pp->chkrstate;
>>  
>>      if (pp->initialized && !pp->mpp)
>> @@ -1235,6 +1237,16 @@ check_path (struct vectors * vecs, struct path *
>>pp)
>>                      pp->wait_checks = 0;
>>      }
>>  
>> +    /*
>> +     * don't reinstate failed path, if its in stand-by
>> +     * and if target supports only implicit tpgs mode.
>> +     * this will prevent unnecessary i/o by dm on stand-by
>> +     * paths if there are no other active paths in map.
>> +     */
>> +    ignore_reinstate = (newstate == PATH_GHOST &&
>> +                        pp->mpp->nr_active == 0 &&
>> +                        pp->tpgs == TPGS_IMPLICIT) ? 1 : 0;
>> +
>>      pp->chkrstate = newstate;
>>      if (newstate != pp->state) {
>>              int oldstate = pp->state;
>> @@ -1297,7 +1309,7 @@ check_path (struct vectors * vecs, struct path *
>>pp)
>>                              pp->watch_checks--;
>>                      add_active = 0;
>>              }
>> -            if (reinstate_path(pp, add_active)) {
>> +            if (!ignore_reinstate && reinstate_path(pp, add_active)) {
>>                      condlog(3, "%s: reload map", pp->dev);
>>                      ev_add_path(pp, vecs);
>>                      pp->tick = 1;
>> @@ -1316,8 +1328,9 @@ check_path (struct vectors * vecs, struct path *
>>pp)
>>                      enable_group(pp);
>>      }
>>      else if (newstate == PATH_UP || newstate == PATH_GHOST) {
>> -            if (pp->dmstate == PSTATE_FAILED ||
>> -                pp->dmstate == PSTATE_UNDEF) {
>> +            if ((pp->dmstate == PSTATE_FAILED ||
>> +                pp->dmstate == PSTATE_UNDEF) &&
>> +                !ignore_reinstate) {
>>                      /* Clear IO errors */
>>                      if (reinstate_path(pp, 0)) {
>>                              condlog(3, "%s: reload map", pp->dev);
>> --
>> 


--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to