SPC defines the preference indicator (bit 7 of the first byte returned
by REPORT TARGET PORT GROUPS) as indicating a preferred primary target
port group, and says that applications may use it to influence path
selection. Choose TPGs with this bit set over TPGs with it unset.
This fixes failback handling with the Intel Modular Server.
Signed-off-by: Yingying Zhao <yingying.zhao@intel.com>
Signed-off-by: Colin Watson <cjwatson@canonical.com>
};
int rc;
int tpg;
+ int aas;
rc = get_target_port_group_support(fd);
if (rc < 0)
rc = get_asymmetric_access_state(fd, tpg);
if (rc < 0)
return -ALUA_PRIO_GETAAS_FAILED;
+ aas = (rc & 0x0f);
condlog(3, "aas = [%s]",
- (rc < 4) ? aas_string[rc] : "invalid/reserved");
+ (aas < 4) ? aas_string[aas] : "invalid/reserved");
return rc;
}
int getprio (struct path * pp)
{
int rc;
+ int aas;
+ int priopath;
if (pp->fd < 0)
return -ALUA_PRIO_NO_INFORMATION;
rc = get_alua_info(pp->fd);
if (rc >= 0) {
- switch(rc) {
+ aas = (rc & 0x0f);
+ priopath = (rc & 0x80);
+ switch(aas) {
case AAS_OPTIMIZED:
rc = 50;
break;
default:
rc = 0;
}
+ if (priopath)
+ rc += 80;
} else {
switch(-rc) {
case ALUA_PRIO_NOT_SUPPORTED:
static inline int
rtpg_tpg_dscr_get_aas(struct rtpg_tpg_dscr *d)
{
- return (d->b0 & 0x0f);
+ return (d->b0 & 0x8f);
}
struct rtpg_data {