|
@@ -1724,6 +1724,7 @@ static void sas_unregister_ex_tree(struct domain_device *dev)
|
|
struct domain_device *child, *n;
|
|
struct domain_device *child, *n;
|
|
|
|
|
|
list_for_each_entry_safe(child, n, &ex->children, siblings) {
|
|
list_for_each_entry_safe(child, n, &ex->children, siblings) {
|
|
|
|
+ child->gone = 1;
|
|
if (child->dev_type == EDGE_DEV ||
|
|
if (child->dev_type == EDGE_DEV ||
|
|
child->dev_type == FANOUT_DEV)
|
|
child->dev_type == FANOUT_DEV)
|
|
sas_unregister_ex_tree(child);
|
|
sas_unregister_ex_tree(child);
|
|
@@ -1744,6 +1745,7 @@ static void sas_unregister_devs_sas_addr(struct domain_device *parent,
|
|
&ex_dev->children, siblings) {
|
|
&ex_dev->children, siblings) {
|
|
if (SAS_ADDR(child->sas_addr) ==
|
|
if (SAS_ADDR(child->sas_addr) ==
|
|
SAS_ADDR(phy->attached_sas_addr)) {
|
|
SAS_ADDR(phy->attached_sas_addr)) {
|
|
|
|
+ child->gone = 1;
|
|
if (child->dev_type == EDGE_DEV ||
|
|
if (child->dev_type == EDGE_DEV ||
|
|
child->dev_type == FANOUT_DEV)
|
|
child->dev_type == FANOUT_DEV)
|
|
sas_unregister_ex_tree(child);
|
|
sas_unregister_ex_tree(child);
|
|
@@ -1752,6 +1754,7 @@ static void sas_unregister_devs_sas_addr(struct domain_device *parent,
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ parent->gone = 1;
|
|
sas_disable_routing(parent, phy->attached_sas_addr);
|
|
sas_disable_routing(parent, phy->attached_sas_addr);
|
|
}
|
|
}
|
|
memset(phy->attached_sas_addr, 0, SAS_ADDR_SIZE);
|
|
memset(phy->attached_sas_addr, 0, SAS_ADDR_SIZE);
|