Bluetooth: Consolidate code around sk_alloc into a helper function
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Thu, 25 May 2023 23:46:41 +0000 (16:46 -0700)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Fri, 11 Aug 2023 18:36:50 +0000 (11:36 -0700)
This consolidates code around sk_alloc into bt_sock_alloc which does
take care of common initialization.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
include/net/bluetooth/bluetooth.h
net/bluetooth/af_bluetooth.c
net/bluetooth/bnep/sock.c
net/bluetooth/hci_sock.c
net/bluetooth/iso.c
net/bluetooth/l2cap_sock.c
net/bluetooth/rfcomm/sock.c
net/bluetooth/sco.c

index af729859385ed866350a032f2f721fbbf47157f1..60689a07b82cb798102ad0a48e4691479bc36e9e 100644 (file)
@@ -400,6 +400,8 @@ int  bt_sock_register(int proto, const struct net_proto_family *ops);
 void bt_sock_unregister(int proto);
 void bt_sock_link(struct bt_sock_list *l, struct sock *s);
 void bt_sock_unlink(struct bt_sock_list *l, struct sock *s);
+struct sock *bt_sock_alloc(struct net *net, struct socket *sock,
+                          struct proto *prot, int proto, gfp_t prio, int kern);
 int  bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
                     int flags);
 int  bt_sock_stream_recvmsg(struct socket *sock, struct msghdr *msg,
index 1c3c7ff5c3c66692216630a7ffaa3dac44ad9af0..6035422e13da52b258d76a9f457dba192f247798 100644 (file)
@@ -140,6 +140,27 @@ static int bt_sock_create(struct net *net, struct socket *sock, int proto,
        return err;
 }
 
+struct sock *bt_sock_alloc(struct net *net, struct socket *sock,
+                          struct proto *prot, int proto, gfp_t prio, int kern)
+{
+       struct sock *sk;
+
+       sk = sk_alloc(net, PF_BLUETOOTH, prio, prot, kern);
+       if (!sk)
+               return NULL;
+
+       sock_init_data(sock, sk);
+       INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
+
+       sock_reset_flag(sk, SOCK_ZAPPED);
+
+       sk->sk_protocol = proto;
+       sk->sk_state    = BT_OPEN;
+
+       return sk;
+}
+EXPORT_SYMBOL(bt_sock_alloc);
+
 void bt_sock_link(struct bt_sock_list *l, struct sock *sk)
 {
        write_lock(&l->lock);
index 57d509d77cb467894fa1d5e5f2aedb3dcdcf6565..00d47bcf4d7dce5abb6b43d81b6985061372d532 100644 (file)
@@ -205,21 +205,13 @@ static int bnep_sock_create(struct net *net, struct socket *sock, int protocol,
        if (sock->type != SOCK_RAW)
                return -ESOCKTNOSUPPORT;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &bnep_proto, kern);
+       sk = bt_sock_alloc(net, sock, &bnep_proto, protocol, GFP_ATOMIC, kern);
        if (!sk)
                return -ENOMEM;
 
-       sock_init_data(sock, sk);
-
        sock->ops = &bnep_sock_ops;
-
        sock->state = SS_UNCONNECTED;
 
-       sock_reset_flag(sk, SOCK_ZAPPED);
-
-       sk->sk_protocol = protocol;
-       sk->sk_state    = BT_OPEN;
-
        bt_sock_link(&bnep_sk_list, sk);
        return 0;
 }
index 1d249d839819d98b1e29637acabf253d28fe4aa8..9c45586f581892ac6e0653b174d9634734291478 100644 (file)
@@ -2143,18 +2143,12 @@ static int hci_sock_create(struct net *net, struct socket *sock, int protocol,
 
        sock->ops = &hci_sock_ops;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &hci_sk_proto, kern);
+       sk = bt_sock_alloc(net, sock, &hci_sk_proto, protocol, GFP_ATOMIC,
+                          kern);
        if (!sk)
                return -ENOMEM;
 
-       sock_init_data(sock, sk);
-
-       sock_reset_flag(sk, SOCK_ZAPPED);
-
-       sk->sk_protocol = protocol;
-
        sock->state = SS_UNCONNECTED;
-       sk->sk_state = BT_OPEN;
        sk->sk_destruct = hci_sock_destruct;
 
        bt_sock_link(&hci_sk_list, sk);
index 5db4d68c96d5c442998981da0eb64fa9f87fa13a..84d238d0639a62b3c77bfc8255c42bcdca4ddee2 100644 (file)
@@ -738,21 +738,13 @@ static struct sock *iso_sock_alloc(struct net *net, struct socket *sock,
 {
        struct sock *sk;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, prio, &iso_proto, kern);
+       sk = bt_sock_alloc(net, sock, &iso_proto, proto, prio, kern);
        if (!sk)
                return NULL;
 
-       sock_init_data(sock, sk);
-       INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
-
        sk->sk_destruct = iso_sock_destruct;
        sk->sk_sndtimeo = ISO_CONN_TIMEOUT;
 
-       sock_reset_flag(sk, SOCK_ZAPPED);
-
-       sk->sk_protocol = proto;
-       sk->sk_state    = BT_OPEN;
-
        /* Set address type as public as default src address is BDADDR_ANY */
        iso_pi(sk)->src_type = BDADDR_LE_PUBLIC;
 
index 947ca580bb9a2f6b6ea21e456ea4bb6b1b8fe2c6..9ef936f27a6a822975379b8690d263f1b99ff6cd 100644 (file)
@@ -1858,21 +1858,13 @@ static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
        struct sock *sk;
        struct l2cap_chan *chan;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto, kern);
+       sk = bt_sock_alloc(net, sock, &l2cap_proto, proto, prio, kern);
        if (!sk)
                return NULL;
 
-       sock_init_data(sock, sk);
-       INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
-
        sk->sk_destruct = l2cap_sock_destruct;
        sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
 
-       sock_reset_flag(sk, SOCK_ZAPPED);
-
-       sk->sk_protocol = proto;
-       sk->sk_state = BT_OPEN;
-
        chan = l2cap_chan_create();
        if (!chan) {
                sk_free(sk);
index 4397e14ff560fd1ca954bc2fdc08639f6988019c..b54e8a530f55a1ff9547a2a5546db34059ebd672 100644 (file)
@@ -268,18 +268,16 @@ static struct proto rfcomm_proto = {
        .obj_size       = sizeof(struct rfcomm_pinfo)
 };
 
-static struct sock *rfcomm_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio, int kern)
+static struct sock *rfcomm_sock_alloc(struct net *net, struct socket *sock,
+                                     int proto, gfp_t prio, int kern)
 {
        struct rfcomm_dlc *d;
        struct sock *sk;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, prio, &rfcomm_proto, kern);
+       sk = bt_sock_alloc(net, sock, &rfcomm_proto, proto, prio, kern);
        if (!sk)
                return NULL;
 
-       sock_init_data(sock, sk);
-       INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
-
        d = rfcomm_dlc_alloc(prio);
        if (!d) {
                sk_free(sk);
@@ -298,11 +296,6 @@ static struct sock *rfcomm_sock_alloc(struct net *net, struct socket *sock, int
        sk->sk_sndbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
        sk->sk_rcvbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
 
-       sock_reset_flag(sk, SOCK_ZAPPED);
-
-       sk->sk_protocol = proto;
-       sk->sk_state    = BT_OPEN;
-
        bt_sock_link(&rfcomm_sk_list, sk);
 
        BT_DBG("sk %p", sk);
index 7762604ddfc059e0a73b9704d2c6da088ea332c3..ec6dce488a400f4f3bc9d258d5ef1518378b18b7 100644 (file)
@@ -504,21 +504,13 @@ static struct sock *sco_sock_alloc(struct net *net, struct socket *sock,
 {
        struct sock *sk;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern);
+       sk = bt_sock_alloc(net, sock, &sco_proto, proto, prio, kern);
        if (!sk)
                return NULL;
 
-       sock_init_data(sock, sk);
-       INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
-
        sk->sk_destruct = sco_sock_destruct;
        sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
 
-       sock_reset_flag(sk, SOCK_ZAPPED);
-
-       sk->sk_protocol = proto;
-       sk->sk_state    = BT_OPEN;
-
        sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
        sco_pi(sk)->codec.id = BT_CODEC_CVSD;
        sco_pi(sk)->codec.cid = 0xffff;