diff options
author | Gustavo Padovan <gustavo.padovan@collabora.co.uk> | 2013-10-15 18:24:48 -0400 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2013-10-15 19:42:44 -0400 |
commit | 5ec1bbe549d939ff1ef88e2cc22b2c3b95d76401 (patch) | |
tree | 877df523bdb1b892675bee1f5aa9bb939a811e5c /net/bluetooth | |
parent | 8d836d71e2223b8961b21112bb4ce89ef8231682 (diff) |
Bluetooth: Add chan->ops->set_shutdown()
We need to remove all direct access of struct sock from L2CAP core.
This change is pretty simple and just add a new L2CAP channel callback to
do the work in the L2CAP socket side.
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth')
-rw-r--r-- | net/bluetooth/a2mp.c | 1 | ||||
-rw-r--r-- | net/bluetooth/l2cap_core.c | 7 | ||||
-rw-r--r-- | net/bluetooth/l2cap_sock.c | 10 |
3 files changed, 12 insertions, 6 deletions
diff --git a/net/bluetooth/a2mp.c b/net/bluetooth/a2mp.c index 1e9921024a1d..74c14779bed6 100644 --- a/net/bluetooth/a2mp.c +++ b/net/bluetooth/a2mp.c | |||
@@ -710,6 +710,7 @@ static struct l2cap_ops a2mp_chan_ops = { | |||
710 | .teardown = l2cap_chan_no_teardown, | 710 | .teardown = l2cap_chan_no_teardown, |
711 | .ready = l2cap_chan_no_ready, | 711 | .ready = l2cap_chan_no_ready, |
712 | .defer = l2cap_chan_no_defer, | 712 | .defer = l2cap_chan_no_defer, |
713 | .set_shutdown = l2cap_chan_no_set_shutdown, | ||
713 | .get_sndtimeo = l2cap_chan_no_get_sndtimeo, | 714 | .get_sndtimeo = l2cap_chan_no_get_sndtimeo, |
714 | }; | 715 | }; |
715 | 716 | ||
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index c6334fc86d1d..634781a60d3f 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c | |||
@@ -4241,7 +4241,6 @@ static inline int l2cap_disconnect_req(struct l2cap_conn *conn, | |||
4241 | struct l2cap_disconn_rsp rsp; | 4241 | struct l2cap_disconn_rsp rsp; |
4242 | u16 dcid, scid; | 4242 | u16 dcid, scid; |
4243 | struct l2cap_chan *chan; | 4243 | struct l2cap_chan *chan; |
4244 | struct sock *sk; | ||
4245 | 4244 | ||
4246 | if (cmd_len != sizeof(*req)) | 4245 | if (cmd_len != sizeof(*req)) |
4247 | return -EPROTO; | 4246 | return -EPROTO; |
@@ -4261,15 +4260,11 @@ static inline int l2cap_disconnect_req(struct l2cap_conn *conn, | |||
4261 | 4260 | ||
4262 | l2cap_chan_lock(chan); | 4261 | l2cap_chan_lock(chan); |
4263 | 4262 | ||
4264 | sk = chan->sk; | ||
4265 | |||
4266 | rsp.dcid = cpu_to_le16(chan->scid); | 4263 | rsp.dcid = cpu_to_le16(chan->scid); |
4267 | rsp.scid = cpu_to_le16(chan->dcid); | 4264 | rsp.scid = cpu_to_le16(chan->dcid); |
4268 | l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp); | 4265 | l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp); |
4269 | 4266 | ||
4270 | lock_sock(sk); | 4267 | chan->ops->set_shutdown(chan); |
4271 | sk->sk_shutdown = SHUTDOWN_MASK; | ||
4272 | release_sock(sk); | ||
4273 | 4268 | ||
4274 | l2cap_chan_hold(chan); | 4269 | l2cap_chan_hold(chan); |
4275 | l2cap_chan_del(chan, ECONNRESET); | 4270 | l2cap_chan_del(chan, ECONNRESET); |
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c index ffa78d3cd8ac..301f25b9b521 100644 --- a/net/bluetooth/l2cap_sock.c +++ b/net/bluetooth/l2cap_sock.c | |||
@@ -1136,6 +1136,15 @@ static void l2cap_sock_resume_cb(struct l2cap_chan *chan) | |||
1136 | sk->sk_state_change(sk); | 1136 | sk->sk_state_change(sk); |
1137 | } | 1137 | } |
1138 | 1138 | ||
1139 | static void l2cap_sock_set_shutdown_cb(struct l2cap_chan *chan) | ||
1140 | { | ||
1141 | struct sock *sk = chan->data; | ||
1142 | |||
1143 | lock_sock(sk); | ||
1144 | sk->sk_shutdown = SHUTDOWN_MASK; | ||
1145 | release_sock(sk); | ||
1146 | } | ||
1147 | |||
1139 | static long l2cap_sock_get_sndtimeo_cb(struct l2cap_chan *chan) | 1148 | static long l2cap_sock_get_sndtimeo_cb(struct l2cap_chan *chan) |
1140 | { | 1149 | { |
1141 | struct sock *sk = chan->data; | 1150 | struct sock *sk = chan->data; |
@@ -1153,6 +1162,7 @@ static struct l2cap_ops l2cap_chan_ops = { | |||
1153 | .ready = l2cap_sock_ready_cb, | 1162 | .ready = l2cap_sock_ready_cb, |
1154 | .defer = l2cap_sock_defer_cb, | 1163 | .defer = l2cap_sock_defer_cb, |
1155 | .resume = l2cap_sock_resume_cb, | 1164 | .resume = l2cap_sock_resume_cb, |
1165 | .set_shutdown = l2cap_sock_set_shutdown_cb, | ||
1156 | .get_sndtimeo = l2cap_sock_get_sndtimeo_cb, | 1166 | .get_sndtimeo = l2cap_sock_get_sndtimeo_cb, |
1157 | .alloc_skb = l2cap_sock_alloc_skb_cb, | 1167 | .alloc_skb = l2cap_sock_alloc_skb_cb, |
1158 | }; | 1168 | }; |