]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Bluetooth: Create flags for bt_sk()
authorGustavo Padovan <gustavo@padovan.org>
Wed, 16 May 2012 15:17:10 +0000 (12:17 -0300)
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>
Wed, 16 May 2012 19:14:17 +0000 (16:14 -0300)
defer_setup and suspended are now flags into bt_sk().

Signed-off-by: Gustavo Padovan <gustavo@padovan.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
include/net/bluetooth/bluetooth.h
net/bluetooth/af_bluetooth.c
net/bluetooth/l2cap_core.c
net/bluetooth/l2cap_sock.c
net/bluetooth/rfcomm/sock.c

index 7981ca48b83a82dc679778a672e2839ad48d0302..961669b648fddd259cc65b9f0771d5158b6f5917 100644 (file)
@@ -194,8 +194,12 @@ struct bt_sock {
        bdaddr_t    dst;
        struct list_head accept_q;
        struct sock *parent;
-       u32 defer_setup;
-       bool suspended;
+       unsigned long flags;
+};
+
+enum {
+       BT_SK_DEFER_SETUP,
+       BT_SK_SUSPEND,
 };
 
 struct bt_sock_list {
index 6fb68a9743af7ebef18adc506f55d1f048bc9181..46e7f86acfc99f820b66564f553dc64fe8fbcbac 100644 (file)
@@ -210,7 +210,7 @@ struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock)
                }
 
                if (sk->sk_state == BT_CONNECTED || !newsock ||
-                                               bt_sk(parent)->defer_setup) {
+                   test_bit(BT_DEFER_SETUP, &bt_sk(parent)->flags)) {
                        bt_accept_unlink(sk);
                        if (newsock)
                                sock_graft(sk, newsock);
@@ -410,8 +410,8 @@ static inline unsigned int bt_accept_poll(struct sock *parent)
        list_for_each_safe(p, n, &bt_sk(parent)->accept_q) {
                sk = (struct sock *) list_entry(p, struct bt_sock, accept_q);
                if (sk->sk_state == BT_CONNECTED ||
-                                       (bt_sk(parent)->defer_setup &&
-                                               sk->sk_state == BT_CONNECT2))
+                   (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags) &&
+                    sk->sk_state == BT_CONNECT2))
                        return POLLIN | POLLRDNORM;
        }
 
@@ -450,7 +450,7 @@ unsigned int bt_sock_poll(struct file *file, struct socket *sock, poll_table *wa
                        sk->sk_state == BT_CONFIG)
                return mask;
 
-       if (!bt_sk(sk)->suspended && sock_writeable(sk))
+       if (!test_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags) && sock_writeable(sk))
                mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
        else
                set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
index 285c5e13c7d51807a9f3dc9789d4cffdeffff08a..24f144b72a96a87ee5f8fdc2016f613f00615344 100644 (file)
@@ -71,7 +71,7 @@ static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
                                                                void *data);
 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data);
 static void l2cap_send_disconn_req(struct l2cap_conn *conn,
-                               struct l2cap_chan *chan, int err);
+                                  struct l2cap_chan *chan, int err);
 
 /* ---- L2CAP channels ---- */
 
@@ -586,7 +586,7 @@ void l2cap_chan_close(struct l2cap_chan *chan, int reason)
                        struct l2cap_conn_rsp rsp;
                        __u16 result;
 
-                       if (bt_sk(sk)->defer_setup)
+                       if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
                                result = L2CAP_CR_SEC_BLOCK;
                        else
                                result = L2CAP_CR_BAD_PSM;
@@ -1050,7 +1050,8 @@ static void l2cap_conn_start(struct l2cap_conn *conn)
 
                        if (l2cap_chan_check_security(chan)) {
                                lock_sock(sk);
-                               if (bt_sk(sk)->defer_setup) {
+                               if (test_bit(BT_SK_DEFER_SETUP,
+                                            &bt_sk(sk)->flags)) {
                                        struct sock *parent = bt_sk(sk)->parent;
                                        rsp.result = cpu_to_le16(L2CAP_CR_PEND);
                                        rsp.status = cpu_to_le16(L2CAP_CS_AUTHOR_PEND);
@@ -3032,7 +3033,7 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd
 
        if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
                if (l2cap_chan_check_security(chan)) {
-                       if (bt_sk(sk)->defer_setup) {
+                       if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
                                __l2cap_state_change(chan, BT_CONNECT2);
                                result = L2CAP_CR_PEND;
                                status = L2CAP_CS_AUTHOR_PEND;
@@ -4924,7 +4925,7 @@ int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
                                                chan->state == BT_CONFIG)) {
                        struct sock *sk = chan->sk;
 
-                       bt_sk(sk)->suspended = false;
+                       clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
                        sk->sk_state_change(sk);
 
                        l2cap_check_encryption(chan, encrypt);
@@ -4946,7 +4947,8 @@ int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
                        lock_sock(sk);
 
                        if (!status) {
-                               if (bt_sk(sk)->defer_setup) {
+                               if (test_bit(BT_SK_DEFER_SETUP,
+                                            &bt_sk(sk)->flags)) {
                                        struct sock *parent = bt_sk(sk)->parent;
                                        res = L2CAP_CR_PEND;
                                        stat = L2CAP_CS_AUTHOR_PEND;
index f52d58e05d028eac5dd38ceda1b628c307addc01..3bb1611b9d487c1c8406748d069af917d269b86c 100644 (file)
@@ -324,8 +324,8 @@ static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __us
 
        case L2CAP_CONNINFO:
                if (sk->sk_state != BT_CONNECTED &&
-                                       !(sk->sk_state == BT_CONNECT2 &&
-                                               bt_sk(sk)->defer_setup)) {
+                   !(sk->sk_state == BT_CONNECT2 &&
+                     test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
                        err = -ENOTCONN;
                        break;
                }
@@ -399,7 +399,8 @@ static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, ch
                        break;
                }
 
-               if (put_user(bt_sk(sk)->defer_setup, (u32 __user *) optval))
+               if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
+                            (u32 __user *) optval))
                        err = -EFAULT;
 
                break;
@@ -601,10 +602,10 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, ch
 
                /* or for ACL link */
                } else if ((sk->sk_state == BT_CONNECT2 &&
-                          bt_sk(sk)->defer_setup) ||
+                          test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) ||
                           sk->sk_state == BT_CONNECTED) {
                        if (!l2cap_chan_check_security(chan))
-                               bt_sk(sk)->suspended = true;
+                               set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
                        else
                                sk->sk_state_change(sk);
                } else {
@@ -623,7 +624,10 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, ch
                        break;
                }
 
-               bt_sk(sk)->defer_setup = opt;
+               if (opt)
+                       set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
+               else
+                       clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
                break;
 
        case BT_FLUSHABLE:
@@ -741,7 +745,8 @@ static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct ms
 
        lock_sock(sk);
 
-       if (sk->sk_state == BT_CONNECT2 && bt_sk(sk)->defer_setup) {
+       if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP,
+                                                   &bt_sk(sk)->flags)) {
                sk->sk_state = BT_CONFIG;
                pi->chan->state = BT_CONFIG;
 
@@ -984,7 +989,7 @@ static void l2cap_sock_init(struct sock *sk, struct sock *parent)
                struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
 
                sk->sk_type = parent->sk_type;
-               bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup;
+               bt_sk(sk)->flags = bt_sk(parent)->flags;
 
                chan->chan_type = pchan->chan_type;
                chan->imtu = pchan->imtu;
index a55a43e9f70e9d35181f1272c3897ac43856a6d9..e8707debb8642cff6cc08755a6400134bcf5b8c7 100644 (file)
@@ -260,7 +260,8 @@ static void rfcomm_sock_init(struct sock *sk, struct sock *parent)
 
        if (parent) {
                sk->sk_type = parent->sk_type;
-               pi->dlc->defer_setup = bt_sk(parent)->defer_setup;
+               pi->dlc->defer_setup = test_bit(BT_SK_DEFER_SETUP,
+                                               &bt_sk(parent)->flags);
 
                pi->sec_level = rfcomm_pi(parent)->sec_level;
                pi->role_switch = rfcomm_pi(parent)->role_switch;
@@ -731,7 +732,11 @@ static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, c
                        break;
                }
 
-               bt_sk(sk)->defer_setup = opt;
+               if (opt)
+                       set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
+               else
+                       clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
+
                break;
 
        default:
@@ -849,7 +854,8 @@ static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, c
                        break;
                }
 
-               if (put_user(bt_sk(sk)->defer_setup, (u32 __user *) optval))
+               if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
+                            (u32 __user *) optval))
                        err = -EFAULT;
 
                break;
@@ -972,7 +978,7 @@ int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc *
 done:
        bh_unlock_sock(parent);
 
-       if (bt_sk(parent)->defer_setup)
+       if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
                parent->sk_state_change(parent);
 
        return result;