Commit ba9be7e7 authored by Jason Yan's avatar Jason Yan Committed by Martin K. Petersen
Browse files

scsi: libsas: Remove an empty branch in sas_check_parent_topology()



There is an empty "all good" branch in sas_check_parent_topology(). We can
reverse the test statement and remove the empty branch.

Moreover, factor out a helper sas_check_edge_expander_topo() to make the
code more readable.

Signed-off-by: default avatarJason Yan <yanaijie@huawei.com>
Link: https://lore.kernel.org/r/20230421093744.1583609-3-yanaijie@huawei.com


Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent e3be011e
Loading
Loading
Loading
Loading
+33 −23
Original line number Diff line number Diff line
@@ -1240,6 +1240,37 @@ static int sas_check_eeds(struct domain_device *child,
	return res;
}

static int sas_check_edge_expander_topo(struct domain_device *child,
					struct ex_phy *parent_phy)
{
	struct expander_device *child_ex = &child->ex_dev;
	struct expander_device *parent_ex = &child->parent->ex_dev;
	struct ex_phy *child_phy;

	child_phy = &child_ex->ex_phy[parent_phy->attached_phy_id];

	if (child->dev_type == SAS_FANOUT_EXPANDER_DEVICE) {
		if (parent_phy->routing_attr != SUBTRACTIVE_ROUTING ||
		    child_phy->routing_attr != TABLE_ROUTING)
			goto error;
	} else if (parent_phy->routing_attr == SUBTRACTIVE_ROUTING) {
		if (child_phy->routing_attr == SUBTRACTIVE_ROUTING)
			return sas_check_eeds(child, parent_phy, child_phy);
		else if (child_phy->routing_attr != TABLE_ROUTING)
			goto error;
	} 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))
			goto error;
	}

	return 0;
error:
	sas_print_parent_topology_bug(child, parent_phy, child_phy);
	return -ENODEV;
}

/* Here we spill over 80 columns.  It is intentional.
 */
static int sas_check_parent_topology(struct domain_device *child)
@@ -1272,29 +1303,8 @@ static int sas_check_parent_topology(struct domain_device *child)

		switch (child->parent->dev_type) {
		case SAS_EDGE_EXPANDER_DEVICE:
			if (child->dev_type == SAS_FANOUT_EXPANDER_DEVICE) {
				if (parent_phy->routing_attr != SUBTRACTIVE_ROUTING ||
				    child_phy->routing_attr != TABLE_ROUTING) {
					sas_print_parent_topology_bug(child, parent_phy, child_phy);
					res = -ENODEV;
				}
			} else if (parent_phy->routing_attr == SUBTRACTIVE_ROUTING) {
				if (child_phy->routing_attr == SUBTRACTIVE_ROUTING) {
					res = sas_check_eeds(child, parent_phy, child_phy);
				} else if (child_phy->routing_attr != TABLE_ROUTING) {
					sas_print_parent_topology_bug(child, parent_phy, child_phy);
					res = -ENODEV;
				}
			} 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);
			if (sas_check_edge_expander_topo(child, parent_phy))
				res = -ENODEV;
				}
			}
			break;
		case SAS_FANOUT_EXPANDER_DEVICE:
			if (parent_phy->routing_attr != TABLE_ROUTING ||