diff options
Diffstat (limited to 'net/bluetooth/rfcomm/sock.c')
-rw-r--r-- | net/bluetooth/rfcomm/sock.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c index cacb1ab51f99..c3ed076481d8 100644 --- a/net/bluetooth/rfcomm/sock.c +++ b/net/bluetooth/rfcomm/sock.c | |||
@@ -690,6 +690,8 @@ static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock, | |||
690 | copied += chunk; | 690 | copied += chunk; |
691 | size -= chunk; | 691 | size -= chunk; |
692 | 692 | ||
693 | sock_recv_timestamp(msg, sk, skb); | ||
694 | |||
693 | if (!(flags & MSG_PEEK)) { | 695 | if (!(flags & MSG_PEEK)) { |
694 | atomic_sub(chunk, &sk->sk_rmem_alloc); | 696 | atomic_sub(chunk, &sk->sk_rmem_alloc); |
695 | 697 | ||
@@ -795,15 +797,20 @@ static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned lon | |||
795 | struct sock *sk = sock->sk; | 797 | struct sock *sk = sock->sk; |
796 | int err; | 798 | int err; |
797 | 799 | ||
798 | lock_sock(sk); | 800 | BT_DBG("sk %p cmd %x arg %lx", sk, cmd, arg); |
799 | 801 | ||
802 | err = bt_sock_ioctl(sock, cmd, arg); | ||
803 | |||
804 | if (err == -ENOIOCTLCMD) { | ||
800 | #ifdef CONFIG_BT_RFCOMM_TTY | 805 | #ifdef CONFIG_BT_RFCOMM_TTY |
801 | err = rfcomm_dev_ioctl(sk, cmd, (void __user *)arg); | 806 | lock_sock(sk); |
807 | err = rfcomm_dev_ioctl(sk, cmd, (void __user *) arg); | ||
808 | release_sock(sk); | ||
802 | #else | 809 | #else |
803 | err = -EOPNOTSUPP; | 810 | err = -EOPNOTSUPP; |
804 | #endif | 811 | #endif |
812 | } | ||
805 | 813 | ||
806 | release_sock(sk); | ||
807 | return err; | 814 | return err; |
808 | } | 815 | } |
809 | 816 | ||