]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/irda/af_irda.c
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[linux-2.6-omap-h63xx.git] / net / irda / af_irda.c
index e9aa1626ea89dd41cca587d94d510436e1595b7b..4c670cf6aefaeb3c06438aa14e435ba7c11fabe3 100644 (file)
@@ -89,7 +89,6 @@ static int irda_data_indication(void *instance, void *sap, struct sk_buff *skb)
 
        self = instance;
        sk = instance;
-       IRDA_ASSERT(sk != NULL, return -1;);
 
        err = sock_queue_rcv_skb(sk, skb);
        if (err) {
@@ -305,8 +304,6 @@ static void irda_connect_response(struct irda_sock *self)
 
        IRDA_DEBUG(2, "%s()\n", __FUNCTION__);
 
-       IRDA_ASSERT(self != NULL, return;);
-
        skb = alloc_skb(TTP_MAX_HEADER + TTP_SAR_HEADER,
                        GFP_ATOMIC);
        if (skb == NULL) {
@@ -336,7 +333,7 @@ static void irda_flow_indication(void *instance, void *sap, LOCAL_FLOW flow)
 
        self = instance;
        sk = instance;
-       IRDA_ASSERT(sk != NULL, return;);
+       BUG_ON(sk == NULL);
 
        switch (flow) {
        case FLOW_STOP:
@@ -448,7 +445,7 @@ static void irda_discovery_timeout(u_long priv)
        IRDA_DEBUG(2, "%s()\n", __FUNCTION__);
 
        self = (struct irda_sock *) priv;
-       IRDA_ASSERT(self != NULL, return;);
+       BUG_ON(self == NULL);
 
        /* Nothing for the caller */
        self->cachelog = NULL;
@@ -545,8 +542,6 @@ static int irda_find_lsap_sel(struct irda_sock *self, char *name)
 {
        IRDA_DEBUG(2, "%s(%p, %s)\n", __FUNCTION__, self, name);
 
-       IRDA_ASSERT(self != NULL, return -1;);
-
        if (self->iriap) {
                IRDA_WARNING("%s(): busy with a previous query\n",
                             __FUNCTION__);
@@ -634,8 +629,6 @@ static int irda_discover_daddr_and_lsap_sel(struct irda_sock *self, char *name)
 
        IRDA_DEBUG(2, "%s(), name=%s\n", __FUNCTION__, name);
 
-       IRDA_ASSERT(self != NULL, return -1;);
-
        /* Ask lmp for the current discovery log
         * Note : we have to use irlmp_get_discoveries(), as opposed
         * to play with the cachelog directly, because while we are
@@ -783,8 +776,6 @@ static int irda_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
        struct irda_sock *self = irda_sk(sk);
        int err;
 
-       IRDA_ASSERT(self != NULL, return -1;);
-
        IRDA_DEBUG(2, "%s(%p)\n", __FUNCTION__, self);
 
        if (addr_len != sizeof(struct sockaddr_irda))
@@ -840,8 +831,6 @@ static int irda_accept(struct socket *sock, struct socket *newsock, int flags)
 
        IRDA_DEBUG(2, "%s()\n", __FUNCTION__);
 
-       IRDA_ASSERT(self != NULL, return -1;);
-
        err = irda_create(newsock, sk->sk_protocol);
        if (err)
                return err;
@@ -872,44 +861,28 @@ static int irda_accept(struct socket *sock, struct socket *newsock, int flags)
         * calling us, the data is waiting for us ;-)
         * Jean II
         */
-       skb = skb_dequeue(&sk->sk_receive_queue);
-       if (skb == NULL) {
-               int ret = 0;
-               DECLARE_WAITQUEUE(waitq, current);
+       while (1) {
+               skb = skb_dequeue(&sk->sk_receive_queue);
+               if (skb)
+                       break;
 
                /* Non blocking operation */
                if (flags & O_NONBLOCK)
                        return -EWOULDBLOCK;
 
-               /* The following code is a cut'n'paste of the
-                * wait_event_interruptible() macro.
-                * We don't us the macro because the condition has
-                * side effects : we want to make sure that only one
-                * skb get dequeued - Jean II */
-               add_wait_queue(sk->sk_sleep, &waitq);
-               for (;;) {
-                       set_current_state(TASK_INTERRUPTIBLE);
-                       skb = skb_dequeue(&sk->sk_receive_queue);
-                       if (skb != NULL)
-                               break;
-                       if (!signal_pending(current)) {
-                               schedule();
-                               continue;
-                       }
-                       ret = -ERESTARTSYS;
-                       break;
-               }
-               current->state = TASK_RUNNING;
-               remove_wait_queue(sk->sk_sleep, &waitq);
-               if(ret)
-                       return -ERESTARTSYS;
+               err = wait_event_interruptible(*(sk->sk_sleep),
+                                       skb_peek(&sk->sk_receive_queue));
+               if (err)
+                       return err;
        }
 
        newsk = newsock->sk;
+       if (newsk == NULL)
+               return -EIO;
+
        newsk->sk_state = TCP_ESTABLISHED;
 
        new = irda_sk(newsk);
-       IRDA_ASSERT(new != NULL, return -1;);
 
        /* Now attach up the new socket */
        new->tsap = irttp_dup(self->tsap, new);
@@ -1171,8 +1144,6 @@ static void irda_destroy_socket(struct irda_sock *self)
 {
        IRDA_DEBUG(2, "%s(%p)\n", __FUNCTION__, self);
 
-       IRDA_ASSERT(self != NULL, return;);
-
        /* Unregister with IrLMP */
        irlmp_unregister_client(self->ckey);
        irlmp_unregister_service(self->skey);
@@ -1291,7 +1262,6 @@ static int irda_sendmsg(struct kiocb *iocb, struct socket *sock,
                return -ENOTCONN;
 
        self = irda_sk(sk);
-       IRDA_ASSERT(self != NULL, return -1;);
 
        /* Check if IrTTP is wants us to slow down */
 
@@ -1354,8 +1324,6 @@ static int irda_recvmsg_dgram(struct kiocb *iocb, struct socket *sock,
 
        IRDA_DEBUG(4, "%s()\n", __FUNCTION__);
 
-       IRDA_ASSERT(self != NULL, return -1;);
-
        if ((err = sock_error(sk)) < 0)
                return err;
 
@@ -1409,8 +1377,6 @@ static int irda_recvmsg_stream(struct kiocb *iocb, struct socket *sock,
 
        IRDA_DEBUG(3, "%s()\n", __FUNCTION__);
 
-       IRDA_ASSERT(self != NULL, return -1;);
-
        if ((err = sock_error(sk)) < 0)
                return err;
 
@@ -1544,7 +1510,6 @@ static int irda_sendmsg_dgram(struct kiocb *iocb, struct socket *sock,
                return -ENOTCONN;
 
        self = irda_sk(sk);
-       IRDA_ASSERT(self != NULL, return -1;);
 
        /*
         * Check that we don't send out too big frames. This is an unreliable
@@ -1613,7 +1578,6 @@ static int irda_sendmsg_ultra(struct kiocb *iocb, struct socket *sock,
        }
 
        self = irda_sk(sk);
-       IRDA_ASSERT(self != NULL, return -1;);
 
        /* Check if an address was specified with sendto. Jean II */
        if (msg->msg_name) {
@@ -1687,8 +1651,6 @@ static int irda_shutdown(struct socket *sock, int how)
        struct sock *sk = sock->sk;
        struct irda_sock *self = irda_sk(sk);
 
-       IRDA_ASSERT(self != NULL, return -1;);
-
        IRDA_DEBUG(1, "%s(%p)\n", __FUNCTION__, self);
 
        sk->sk_state       = TCP_CLOSE;
@@ -1861,8 +1823,6 @@ static int irda_setsockopt(struct socket *sock, int level, int optname,
        struct ias_attrib *     ias_attr;       /* Attribute in IAS object */
        int opt;
 
-       IRDA_ASSERT(self != NULL, return -1;);
-
        IRDA_DEBUG(2, "%s(%p)\n", __FUNCTION__, self);
 
        if (level != SOL_IRLMP)
@@ -2578,7 +2538,6 @@ static const struct proto_ops SOCKOPS_WRAPPED(irda_ultra_ops) = {
 };
 #endif /* CONFIG_IRDA_ULTRA */
 
-#include <linux/smp_lock.h>
 SOCKOPS_WRAP(irda_stream, PF_IRDA);
 SOCKOPS_WRAP(irda_seqpacket, PF_IRDA);
 SOCKOPS_WRAP(irda_dgram, PF_IRDA);
@@ -2608,7 +2567,7 @@ int __init irsock_init(void)
  *    Remove IrDA protocol
  *
  */
-void __exit irsock_cleanup(void)
+void irsock_cleanup(void)
 {
        sock_unregister(PF_IRDA);
        proto_unregister(&irda_proto);