Reduce the indentation levels in the HCI driver, mostly by using *goto* in the error paths (and also by collapsing "double" *if* statements into the "singular" ones). This makes the coding style more consistent across the HCI driver. Signed-off-by: Sergey Shtylyov <s.shtylyov@xxxxxxxxxxxx> --- net/bluetooth/hci_event.c | 316 ++++++++++++++++++++++++---------------------- 1 file changed, 170 insertions(+), 146 deletions(-) Index: bluetooth-next/net/bluetooth/hci_event.c =================================================================== --- bluetooth-next.orig/net/bluetooth/hci_event.c +++ bluetooth-next/net/bluetooth/hci_event.c @@ -1861,13 +1861,11 @@ static void hci_cs_create_conn(struct hc } else conn->state = BT_CONNECT2; } - } else { - if (!conn) { - conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr, - HCI_ROLE_MASTER); - if (!conn) - bt_dev_err(hdev, "no memory for new connection"); - } + } else if (!conn) { + conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr, + HCI_ROLE_MASTER); + if (!conn) + bt_dev_err(hdev, "no memory for new connection"); } hci_dev_unlock(hdev); @@ -1895,16 +1893,19 @@ static void hci_cs_add_sco(struct hci_de hci_dev_lock(hdev); acl = hci_conn_hash_lookup_handle(hdev, handle); - if (acl) { - sco = acl->link; - if (sco) { - sco->state = BT_CLOSED; + if (!acl) + goto unlock; - hci_connect_cfm(sco, status); - hci_conn_del(sco); - } - } + sco = acl->link; + if (!sco) + goto unlock; + sco->state = BT_CLOSED; + + hci_connect_cfm(sco, status); + hci_conn_del(sco); + +unlock: hci_dev_unlock(hdev); } @@ -1925,13 +1926,13 @@ static void hci_cs_auth_requested(struct hci_dev_lock(hdev); conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle)); - if (conn) { - if (conn->state == BT_CONFIG) { - hci_connect_cfm(conn, status); - hci_conn_drop(conn); - } - } + if (!conn || conn->state != BT_CONFIG) + goto unlock; + + hci_connect_cfm(conn, status); + hci_conn_drop(conn); +unlock: hci_dev_unlock(hdev); } @@ -1952,13 +1953,13 @@ static void hci_cs_set_conn_encrypt(stru hci_dev_lock(hdev); conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle)); - if (conn) { - if (conn->state == BT_CONFIG) { - hci_connect_cfm(conn, status); - hci_conn_drop(conn); - } - } + if (!conn || conn->state != BT_CONFIG) + goto unlock; + hci_connect_cfm(conn, status); + hci_conn_drop(conn); + +unlock: hci_dev_unlock(hdev); } @@ -2128,13 +2129,13 @@ static void hci_cs_read_remote_features( hci_dev_lock(hdev); conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle)); - if (conn) { - if (conn->state == BT_CONFIG) { - hci_connect_cfm(conn, status); - hci_conn_drop(conn); - } - } + if (!conn || conn->state != BT_CONFIG) + goto unlock; + hci_connect_cfm(conn, status); + hci_conn_drop(conn); + +unlock: hci_dev_unlock(hdev); } @@ -2155,13 +2156,13 @@ static void hci_cs_read_remote_ext_featu hci_dev_lock(hdev); conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle)); - if (conn) { - if (conn->state == BT_CONFIG) { - hci_connect_cfm(conn, status); - hci_conn_drop(conn); - } - } + if (!conn || conn->state != BT_CONFIG) + goto unlock; + + hci_connect_cfm(conn, status); + hci_conn_drop(conn); +unlock: hci_dev_unlock(hdev); } @@ -2187,16 +2188,19 @@ static void hci_cs_setup_sync_conn(struc hci_dev_lock(hdev); acl = hci_conn_hash_lookup_handle(hdev, handle); - if (acl) { - sco = acl->link; - if (sco) { - sco->state = BT_CLOSED; + if (!acl) + goto unlock; - hci_connect_cfm(sco, status); - hci_conn_del(sco); - } - } + sco = acl->link; + if (!sco) + goto unlock; + + sco->state = BT_CLOSED; + + hci_connect_cfm(sco, status); + hci_conn_del(sco); +unlock: hci_dev_unlock(hdev); } @@ -2217,13 +2221,15 @@ static void hci_cs_sniff_mode(struct hci hci_dev_lock(hdev); conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle)); - if (conn) { - clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags); + if (!conn) + goto unlock; - if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags)) - hci_sco_setup(conn, status); - } + clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags); + + if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags)) + hci_sco_setup(conn, status); +unlock: hci_dev_unlock(hdev); } @@ -2244,13 +2250,14 @@ static void hci_cs_exit_sniff_mode(struc hci_dev_lock(hdev); conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle)); - if (conn) { - clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags); + if (!conn) + goto unlock; - if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags)) - hci_sco_setup(conn, status); - } + clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags); + if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags)) + hci_sco_setup(conn, status); +unlock: hci_dev_unlock(hdev); } @@ -2406,13 +2413,13 @@ static void hci_cs_le_read_remote_featur hci_dev_lock(hdev); conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle)); - if (conn) { - if (conn->state == BT_CONFIG) { - hci_connect_cfm(conn, status); - hci_conn_drop(conn); - } - } + if (!conn || conn->state != BT_CONFIG) + goto unlock; + + hci_connect_cfm(conn, status); + hci_conn_drop(conn); +unlock: hci_dev_unlock(hdev); } @@ -3171,15 +3178,17 @@ static void hci_change_link_key_complete hci_dev_lock(hdev); conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle)); - if (conn) { - if (!ev->status) - set_bit(HCI_CONN_SECURE, &conn->flags); + if (!conn) + goto unlock; - clear_bit(HCI_CONN_AUTH_PEND, &conn->flags); + if (!ev->status) + set_bit(HCI_CONN_SECURE, &conn->flags); - hci_key_change_cfm(conn, ev->status); - } + clear_bit(HCI_CONN_AUTH_PEND, &conn->flags); + + hci_key_change_cfm(conn, ev->status); +unlock: hci_dev_unlock(hdev); } @@ -3737,15 +3746,17 @@ static void hci_role_change_evt(struct h hci_dev_lock(hdev); conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr); - if (conn) { - if (!ev->status) - conn->role = ev->role; + if (!conn) + goto unlock; - clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags); + if (!ev->status) + conn->role = ev->role; - hci_role_switch_cfm(conn, ev->status, ev->role); - } + clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags); + + hci_role_switch_cfm(conn, ev->status, ev->role); +unlock: hci_dev_unlock(hdev); } @@ -3898,21 +3909,22 @@ static void hci_mode_change_evt(struct h hci_dev_lock(hdev); conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle)); - if (conn) { - conn->mode = ev->mode; + if (!conn) + goto unlock; - if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, - &conn->flags)) { - if (conn->mode == HCI_CM_ACTIVE) - set_bit(HCI_CONN_POWER_SAVE, &conn->flags); - else - clear_bit(HCI_CONN_POWER_SAVE, &conn->flags); - } + conn->mode = ev->mode; - if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags)) - hci_sco_setup(conn, ev->status); + if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) { + if (conn->mode == HCI_CM_ACTIVE) + set_bit(HCI_CONN_POWER_SAVE, &conn->flags); + else + clear_bit(HCI_CONN_POWER_SAVE, &conn->flags); } + if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags)) + hci_sco_setup(conn, ev->status); + +unlock: hci_dev_unlock(hdev); } @@ -4011,27 +4023,29 @@ static void hci_link_key_request_evt(str &ev->bdaddr); conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr); - if (conn) { - clear_bit(HCI_CONN_NEW_LINK_KEY, &conn->flags); + if (!conn) + goto found; - if ((key->type == HCI_LK_UNAUTH_COMBINATION_P192 || - key->type == HCI_LK_UNAUTH_COMBINATION_P256) && - conn->auth_type != 0xff && (conn->auth_type & 0x01)) { - BT_DBG("%s ignoring unauthenticated key", hdev->name); - goto not_found; - } + clear_bit(HCI_CONN_NEW_LINK_KEY, &conn->flags); - if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 && - (conn->pending_sec_level == BT_SECURITY_HIGH || - conn->pending_sec_level == BT_SECURITY_FIPS)) { - BT_DBG("%s ignoring key unauthenticated for high security", - hdev->name); - goto not_found; - } + if ((key->type == HCI_LK_UNAUTH_COMBINATION_P192 || + key->type == HCI_LK_UNAUTH_COMBINATION_P256) && + conn->auth_type != 0xff && (conn->auth_type & 0x01)) { + BT_DBG("%s ignoring unauthenticated key", hdev->name); + goto not_found; + } - conn_set_key(conn, key->type, key->pin_len); + if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 && + (conn->pending_sec_level == BT_SECURITY_HIGH || + conn->pending_sec_level == BT_SECURITY_FIPS)) { + BT_DBG("%s ignoring key unauthenticated for high security", + hdev->name); + goto not_found; } + conn_set_key(conn, key->type, key->pin_len); + +found: bacpy(&cp.bdaddr, &ev->bdaddr); memcpy(cp.link_key, key->val, HCI_LINK_KEY_SIZE); @@ -4155,11 +4169,13 @@ static void hci_pscan_rep_mode_evt(struc hci_dev_lock(hdev); ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr); - if (ie) { - ie->data.pscan_rep_mode = ev->pscan_rep_mode; - ie->timestamp = jiffies; - } + if (!ie) + goto unlock; + + ie->data.pscan_rep_mode = ev->pscan_rep_mode; + ie->timestamp = jiffies; +unlock: hci_dev_unlock(hdev); } @@ -5041,11 +5057,13 @@ static void hci_disconn_phylink_complete hci_dev_lock(hdev); hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle); - if (hcon) { - hcon->state = BT_CLOSED; - hci_conn_del(hcon); - } + if (!hcon) + goto unlock; + + hcon->state = BT_CLOSED; + hci_conn_del(hcon); +unlock: hci_dev_unlock(hdev); } #endif @@ -5198,14 +5216,16 @@ static void le_conn_complete_evt(struct params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst, conn->dst_type); - if (params) { - list_del_init(¶ms->action); - if (params->conn) { - hci_conn_drop(params->conn); - hci_conn_put(params->conn); - params->conn = NULL; - } - } + if (!params) + goto unlock; + + list_del_init(¶ms->action); + if (!params->conn) + goto unlock; + + hci_conn_drop(params->conn); + hci_conn_put(params->conn); + params->conn = NULL; unlock: hci_update_background_scan(hdev); @@ -5286,12 +5306,14 @@ static void hci_le_conn_update_complete_ hci_dev_lock(hdev); conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle)); - if (conn) { - conn->le_conn_interval = le16_to_cpu(ev->interval); - conn->le_conn_latency = le16_to_cpu(ev->latency); - conn->le_supv_timeout = le16_to_cpu(ev->supervision_timeout); - } + if (!conn) + goto unlock; + conn->le_conn_interval = le16_to_cpu(ev->interval); + conn->le_conn_latency = le16_to_cpu(ev->latency); + conn->le_supv_timeout = le16_to_cpu(ev->supervision_timeout); + +unlock: hci_dev_unlock(hdev); } @@ -5700,34 +5722,36 @@ static void hci_le_remote_feat_complete_ hci_dev_lock(hdev); conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle)); - if (conn) { - if (!ev->status) - memcpy(conn->features[0], ev->features, 8); + if (!conn) + goto unlock; - if (conn->state == BT_CONFIG) { - __u8 status; + if (!ev->status) + memcpy(conn->features[0], ev->features, 8); - /* If the local controller supports slave-initiated - * features exchange, but the remote controller does - * not, then it is possible that the error code 0x1a - * for unsupported remote feature gets returned. - * - * In this specific case, allow the connection to - * transition into connected state and mark it as - * successful. - */ - if ((hdev->le_features[0] & HCI_LE_SLAVE_FEATURES) && - !conn->out && ev->status == 0x1a) - status = 0x00; - else - status = ev->status; + if (conn->state == BT_CONFIG) { + __u8 status; - conn->state = BT_CONNECTED; - hci_connect_cfm(conn, status); - hci_conn_drop(conn); - } + /* If the local controller supports slave-initiated + * features exchange, but the remote controller does + * not, then it is possible that the error code 0x1a + * for unsupported remote feature gets returned. + * + * In this specific case, allow the connection to + * transition into connected state and mark it as + * successful. + */ + if ((hdev->le_features[0] & HCI_LE_SLAVE_FEATURES) && + !conn->out && ev->status == 0x1a) + status = 0x00; + else + status = ev->status; + + conn->state = BT_CONNECTED; + hci_connect_cfm(conn, status); + hci_conn_drop(conn); } +unlock: hci_dev_unlock(hdev); }