Skip to content

Commit c47b7c7

Browse files
author
Gustavo F. Padovan
committed
Bluetooth: move l2cap_sock_accept() to l2cap_sock.c
Signed-off-by: Gustavo F. Padovan <[email protected]>
1 parent af6bcd8 commit c47b7c7

File tree

3 files changed

+56
-57
lines changed

3 files changed

+56
-57
lines changed

include/net/bluetooth/l2cap.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,6 @@ struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
439439
int proto, gfp_t prio);
440440

441441
int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags);
442-
int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags);
443442
int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer);
444443
int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len);
445444
int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags);

net/bluetooth/l2cap_core.c

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -993,62 +993,6 @@ int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int
993993
return err;
994994
}
995995

996-
int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
997-
{
998-
DECLARE_WAITQUEUE(wait, current);
999-
struct sock *sk = sock->sk, *nsk;
1000-
long timeo;
1001-
int err = 0;
1002-
1003-
lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
1004-
1005-
if (sk->sk_state != BT_LISTEN) {
1006-
err = -EBADFD;
1007-
goto done;
1008-
}
1009-
1010-
timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
1011-
1012-
BT_DBG("sk %p timeo %ld", sk, timeo);
1013-
1014-
/* Wait for an incoming connection. (wake-one). */
1015-
add_wait_queue_exclusive(sk_sleep(sk), &wait);
1016-
while (!(nsk = bt_accept_dequeue(sk, newsock))) {
1017-
set_current_state(TASK_INTERRUPTIBLE);
1018-
if (!timeo) {
1019-
err = -EAGAIN;
1020-
break;
1021-
}
1022-
1023-
release_sock(sk);
1024-
timeo = schedule_timeout(timeo);
1025-
lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
1026-
1027-
if (sk->sk_state != BT_LISTEN) {
1028-
err = -EBADFD;
1029-
break;
1030-
}
1031-
1032-
if (signal_pending(current)) {
1033-
err = sock_intr_errno(timeo);
1034-
break;
1035-
}
1036-
}
1037-
set_current_state(TASK_RUNNING);
1038-
remove_wait_queue(sk_sleep(sk), &wait);
1039-
1040-
if (err)
1041-
goto done;
1042-
1043-
newsock->state = SS_CONNECTED;
1044-
1045-
BT_DBG("new socket %p", nsk);
1046-
1047-
done:
1048-
release_sock(sk);
1049-
return err;
1050-
}
1051-
1052996
int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
1053997
{
1054998
struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;

net/bluetooth/l2cap_sock.c

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,62 @@ static int l2cap_sock_listen(struct socket *sock, int backlog)
197197
return err;
198198
}
199199

200+
static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
201+
{
202+
DECLARE_WAITQUEUE(wait, current);
203+
struct sock *sk = sock->sk, *nsk;
204+
long timeo;
205+
int err = 0;
206+
207+
lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
208+
209+
if (sk->sk_state != BT_LISTEN) {
210+
err = -EBADFD;
211+
goto done;
212+
}
213+
214+
timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
215+
216+
BT_DBG("sk %p timeo %ld", sk, timeo);
217+
218+
/* Wait for an incoming connection. (wake-one). */
219+
add_wait_queue_exclusive(sk_sleep(sk), &wait);
220+
while (!(nsk = bt_accept_dequeue(sk, newsock))) {
221+
set_current_state(TASK_INTERRUPTIBLE);
222+
if (!timeo) {
223+
err = -EAGAIN;
224+
break;
225+
}
226+
227+
release_sock(sk);
228+
timeo = schedule_timeout(timeo);
229+
lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
230+
231+
if (sk->sk_state != BT_LISTEN) {
232+
err = -EBADFD;
233+
break;
234+
}
235+
236+
if (signal_pending(current)) {
237+
err = sock_intr_errno(timeo);
238+
break;
239+
}
240+
}
241+
set_current_state(TASK_RUNNING);
242+
remove_wait_queue(sk_sleep(sk), &wait);
243+
244+
if (err)
245+
goto done;
246+
247+
newsock->state = SS_CONNECTED;
248+
249+
BT_DBG("new socket %p", nsk);
250+
251+
done:
252+
release_sock(sk);
253+
return err;
254+
}
255+
200256
static int l2cap_sock_release(struct socket *sock)
201257
{
202258
struct sock *sk = sock->sk;

0 commit comments

Comments
 (0)