Bluetooth: Create separate l2cap_send_disconn_req() function
authorGustavo F. Padovan <gustavo@las.ic.unicamp.br>
Thu, 23 Jul 2009 13:27:23 +0000 (10:27 -0300)
committerMarcel Holtmann <marcel@holtmann.org>
Sat, 22 Aug 2009 21:50:07 +0000 (14:50 -0700)
The code for sending a disconnect request was repeated several times
within L2CAP source code. So move this into its own function.

Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/l2cap.c

index af0fbf9..c1b5620 100644 (file)
@@ -366,6 +366,16 @@ static void l2cap_do_start(struct sock *sk)
        }
 }
 
+static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct sock *sk)
+{
+       struct l2cap_disconn_req req;
+
+       req.dcid = cpu_to_le16(l2cap_pi(sk)->dcid);
+       req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
+       l2cap_send_cmd(conn, l2cap_get_ident(conn),
+                       L2CAP_DISCONN_REQ, sizeof(req), &req);
+}
+
 /* ---- L2CAP connections ---- */
 static void l2cap_conn_start(struct l2cap_conn *conn)
 {
@@ -650,15 +660,10 @@ static void __l2cap_sock_close(struct sock *sk, int reason)
        case BT_CONFIG:
                if (sk->sk_type == SOCK_SEQPACKET) {
                        struct l2cap_conn *conn = l2cap_pi(sk)->conn;
-                       struct l2cap_disconn_req req;
 
                        sk->sk_state = BT_DISCONN;
                        l2cap_sock_set_timer(sk, sk->sk_sndtimeo);
-
-                       req.dcid = cpu_to_le16(l2cap_pi(sk)->dcid);
-                       req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
-                       l2cap_send_cmd(conn, l2cap_get_ident(conn),
-                                       L2CAP_DISCONN_REQ, sizeof(req), &req);
+                       l2cap_send_disconn_req(conn, sk);
                } else
                        l2cap_chan_del(sk, reason);
                break;
@@ -1786,13 +1791,8 @@ static int l2cap_build_conf_req(struct sock *sk, void *data)
        case L2CAP_MODE_STREAMING:
        case L2CAP_MODE_ERTM:
                pi->conf_state |= L2CAP_CONF_STATE2_DEVICE;
-               if (!l2cap_mode_supported(pi->mode, pi->conn->feat_mask)) {
-                       struct l2cap_disconn_req req;
-                       req.dcid = cpu_to_le16(pi->dcid);
-                       req.scid = cpu_to_le16(pi->scid);
-                       l2cap_send_cmd(pi->conn, l2cap_get_ident(pi->conn),
-                                       L2CAP_DISCONN_REQ, sizeof(req), &req);
-               }
+               if (!l2cap_mode_supported(pi->mode, pi->conn->feat_mask))
+                       l2cap_send_disconn_req(pi->conn, sk);
                break;
        default:
                pi->mode = l2cap_select_mode(rfc.mode, pi->conn->feat_mask);
@@ -2286,11 +2286,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr
        /* Complete config. */
        len = l2cap_parse_conf_req(sk, rsp);
        if (len < 0) {
-               struct l2cap_disconn_req req;
-               req.dcid = cpu_to_le16(l2cap_pi(sk)->dcid);
-               req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
-               l2cap_send_cmd(conn, l2cap_get_ident(conn),
-                                       L2CAP_DISCONN_REQ, sizeof(req), &req);
+               l2cap_send_disconn_req(conn, sk);
                goto unlock;
        }
 
@@ -2352,11 +2348,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr
                        len = l2cap_parse_conf_rsp(sk, rsp->data,
                                                        len, req, &result);
                        if (len < 0) {
-                               struct l2cap_disconn_req req;
-                               req.dcid = cpu_to_le16(l2cap_pi(sk)->dcid);
-                               req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
-                               l2cap_send_cmd(conn, l2cap_get_ident(conn),
-                                       L2CAP_DISCONN_REQ, sizeof(req), &req);
+                               l2cap_send_disconn_req(conn, sk);
                                goto done;
                        }
 
@@ -2372,13 +2364,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr
                sk->sk_state = BT_DISCONN;
                sk->sk_err = ECONNRESET;
                l2cap_sock_set_timer(sk, HZ * 5);
-               {
-                       struct l2cap_disconn_req req;
-                       req.dcid = cpu_to_le16(l2cap_pi(sk)->dcid);
-                       req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
-                       l2cap_send_cmd(conn, l2cap_get_ident(conn),
-                                       L2CAP_DISCONN_REQ, sizeof(req), &req);
-               }
+               l2cap_send_disconn_req(conn, sk);
                goto done;
        }