]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/bluetooth/rfcomm/sock.c
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[linux-2.6-omap-h63xx.git] / net / bluetooth / rfcomm / sock.c
index 5083adcbfae5b57fbf912ade3bb4e122b4c7d759..d3fc6fca38d0892af7fe2e2d0f18328a82b6df2e 100644 (file)
@@ -23,8 +23,6 @@
 
 /*
  * RFCOMM sockets.
- *
- * $Id: sock.c,v 1.24 2002/10/03 01:00:34 maxk Exp $
  */
 
 #include <linux/module.h>
 #include <net/bluetooth/l2cap.h>
 #include <net/bluetooth/rfcomm.h>
 
-#ifndef CONFIG_BT_RFCOMM_DEBUG
-#undef  BT_DBG
-#define BT_DBG(D...)
-#endif
-
 static const struct proto_ops rfcomm_sock_ops;
 
 static struct bt_sock_list rfcomm_sk_list = {
@@ -309,13 +302,13 @@ static struct sock *rfcomm_sock_alloc(struct net *net, struct socket *sock, int
        sk->sk_destruct = rfcomm_sock_destruct;
        sk->sk_sndtimeo = RFCOMM_CONN_TIMEOUT;
 
-       sk->sk_sndbuf   = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
-       sk->sk_rcvbuf   = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
+       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;
+       sk->sk_state    = BT_OPEN;
 
        bt_sock_link(&rfcomm_sk_list, sk);
 
@@ -413,6 +406,8 @@ static int rfcomm_sock_connect(struct socket *sock, struct sockaddr *addr, int a
        bacpy(&bt_sk(sk)->dst, &sa->rc_bdaddr);
        rfcomm_pi(sk)->channel = sa->rc_channel;
 
+       d->link_mode = rfcomm_pi(sk)->link_mode;
+
        err = rfcomm_dlc_open(d, &bt_sk(sk)->src, &sa->rc_bdaddr, sa->rc_channel);
        if (!err)
                err = bt_sock_wait_state(sk, BT_CONNECTED,
@@ -644,7 +639,7 @@ static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
 
        msg->msg_namelen = 0;
 
-       BT_DBG("sk %p size %d", sk, size);
+       BT_DBG("sk %p size %zu", sk, size);
 
        lock_sock(sk);
 
@@ -688,6 +683,8 @@ static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
                copied += chunk;
                size   -= chunk;
 
+               sock_recv_timestamp(msg, sk, skb);
+
                if (!(flags & MSG_PEEK)) {
                        atomic_sub(chunk, &sk->sk_rmem_alloc);
 
@@ -790,18 +787,23 @@ static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, c
 
 static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 {
-       struct sock *sk = sock->sk;
+       struct sock *sk __maybe_unused = sock->sk;
        int err;
 
-       lock_sock(sk);
+       BT_DBG("sk %p cmd %x arg %lx", sk, cmd, arg);
+
+       err = bt_sock_ioctl(sock, cmd, arg);
 
+       if (err == -ENOIOCTLCMD) {
 #ifdef CONFIG_BT_RFCOMM_TTY
-       err = rfcomm_dev_ioctl(sk, cmd, (void __user *)arg);
+               lock_sock(sk);
+               err = rfcomm_dev_ioctl(sk, cmd, (void __user *) arg);
+               release_sock(sk);
 #else
-       err = -EOPNOTSUPP;
+               err = -EOPNOTSUPP;
 #endif
+       }
 
-       release_sock(sk);
        return err;
 }