Loading drivers/scsi/libsas/sas_expander.c +14 −6 Original line number Diff line number Diff line Loading @@ -329,6 +329,7 @@ static void ex_assign_report_general(struct domain_device *dev, dev->ex_dev.ex_change_count = be16_to_cpu(rg->change_count); dev->ex_dev.max_route_indexes = be16_to_cpu(rg->route_indexes); dev->ex_dev.num_phys = min(rg->num_phys, (u8)MAX_EXPANDER_PHYS); dev->ex_dev.t2t_supp = rg->t2t_supp; dev->ex_dev.conf_route_table = rg->conf_route_table; dev->ex_dev.configuring = rg->configuring; memcpy(dev->ex_dev.enclosure_logical_id, rg->enclosure_logical_id, 8); Loading Loading @@ -1133,15 +1134,17 @@ static void sas_print_parent_topology_bug(struct domain_device *child, }; struct domain_device *parent = child->parent; sas_printk("%s ex %016llx phy 0x%x <--> %s ex %016llx phy 0x%x " "has %c:%c routing link!\n", sas_printk("%s ex %016llx (T2T supp:%d) phy 0x%x <--> %s ex %016llx " "(T2T supp:%d) phy 0x%x has %c:%c routing link!\n", ex_type[parent->dev_type], SAS_ADDR(parent->sas_addr), parent->ex_dev.t2t_supp, parent_phy->phy_id, ex_type[child->dev_type], SAS_ADDR(child->sas_addr), child->ex_dev.t2t_supp, child_phy->phy_id, ra_char[parent_phy->routing_attr], Loading Loading @@ -1238,11 +1241,16 @@ static int sas_check_parent_topology(struct domain_device *child) sas_print_parent_topology_bug(child, parent_phy, child_phy); res = -ENODEV; } } else if (parent_phy->routing_attr == TABLE_ROUTING && child_phy->routing_attr != SUBTRACTIVE_ROUTING) { } else if (parent_phy->routing_attr == TABLE_ROUTING) { if (child_phy->routing_attr == SUBTRACTIVE_ROUTING || (child_phy->routing_attr == TABLE_ROUTING && child_ex->t2t_supp && parent_ex->t2t_supp)) { /* All good */; } else { sas_print_parent_topology_bug(child, parent_phy, child_phy); res = -ENODEV; } } break; case FANOUT_DEV: if (parent_phy->routing_attr != TABLE_ROUTING || Loading include/scsi/libsas.h +3 −0 Original line number Diff line number Diff line Loading @@ -142,8 +142,11 @@ struct expander_device { u16 ex_change_count; u16 max_route_indexes; u8 num_phys; u8 t2t_supp:1; u8 configuring:1; u8 conf_route_table:1; u8 enclosure_logical_id[8]; struct ex_phy *ex_phy; Loading include/scsi/sas.h +12 −2 Original line number Diff line number Diff line Loading @@ -349,7 +349,12 @@ struct report_general_resp { u8 conf_route_table:1; u8 configuring:1; u8 _r_b:6; u8 config_others:1; u8 orej_retry_supp:1; u8 stp_cont_awt:1; u8 self_config:1; u8 zone_config:1; u8 t2t_supp:1; u8 _r_c; Loading Loading @@ -536,7 +541,12 @@ struct report_general_resp { u8 _r_a; u8 num_phys; u8 _r_b:6; u8 t2t_supp:1; u8 zone_config:1; u8 self_config:1; u8 stp_cont_awt:1; u8 orej_retry_supp:1; u8 config_others:1; u8 configuring:1; u8 conf_route_table:1; Loading Loading
drivers/scsi/libsas/sas_expander.c +14 −6 Original line number Diff line number Diff line Loading @@ -329,6 +329,7 @@ static void ex_assign_report_general(struct domain_device *dev, dev->ex_dev.ex_change_count = be16_to_cpu(rg->change_count); dev->ex_dev.max_route_indexes = be16_to_cpu(rg->route_indexes); dev->ex_dev.num_phys = min(rg->num_phys, (u8)MAX_EXPANDER_PHYS); dev->ex_dev.t2t_supp = rg->t2t_supp; dev->ex_dev.conf_route_table = rg->conf_route_table; dev->ex_dev.configuring = rg->configuring; memcpy(dev->ex_dev.enclosure_logical_id, rg->enclosure_logical_id, 8); Loading Loading @@ -1133,15 +1134,17 @@ static void sas_print_parent_topology_bug(struct domain_device *child, }; struct domain_device *parent = child->parent; sas_printk("%s ex %016llx phy 0x%x <--> %s ex %016llx phy 0x%x " "has %c:%c routing link!\n", sas_printk("%s ex %016llx (T2T supp:%d) phy 0x%x <--> %s ex %016llx " "(T2T supp:%d) phy 0x%x has %c:%c routing link!\n", ex_type[parent->dev_type], SAS_ADDR(parent->sas_addr), parent->ex_dev.t2t_supp, parent_phy->phy_id, ex_type[child->dev_type], SAS_ADDR(child->sas_addr), child->ex_dev.t2t_supp, child_phy->phy_id, ra_char[parent_phy->routing_attr], Loading Loading @@ -1238,11 +1241,16 @@ static int sas_check_parent_topology(struct domain_device *child) sas_print_parent_topology_bug(child, parent_phy, child_phy); res = -ENODEV; } } else if (parent_phy->routing_attr == TABLE_ROUTING && child_phy->routing_attr != SUBTRACTIVE_ROUTING) { } else if (parent_phy->routing_attr == TABLE_ROUTING) { if (child_phy->routing_attr == SUBTRACTIVE_ROUTING || (child_phy->routing_attr == TABLE_ROUTING && child_ex->t2t_supp && parent_ex->t2t_supp)) { /* All good */; } else { sas_print_parent_topology_bug(child, parent_phy, child_phy); res = -ENODEV; } } break; case FANOUT_DEV: if (parent_phy->routing_attr != TABLE_ROUTING || Loading
include/scsi/libsas.h +3 −0 Original line number Diff line number Diff line Loading @@ -142,8 +142,11 @@ struct expander_device { u16 ex_change_count; u16 max_route_indexes; u8 num_phys; u8 t2t_supp:1; u8 configuring:1; u8 conf_route_table:1; u8 enclosure_logical_id[8]; struct ex_phy *ex_phy; Loading
include/scsi/sas.h +12 −2 Original line number Diff line number Diff line Loading @@ -349,7 +349,12 @@ struct report_general_resp { u8 conf_route_table:1; u8 configuring:1; u8 _r_b:6; u8 config_others:1; u8 orej_retry_supp:1; u8 stp_cont_awt:1; u8 self_config:1; u8 zone_config:1; u8 t2t_supp:1; u8 _r_c; Loading Loading @@ -536,7 +541,12 @@ struct report_general_resp { u8 _r_a; u8 num_phys; u8 _r_b:6; u8 t2t_supp:1; u8 zone_config:1; u8 self_config:1; u8 stp_cont_awt:1; u8 orej_retry_supp:1; u8 config_others:1; u8 configuring:1; u8 conf_route_table:1; Loading