caif: Bugfix - wait_ev*_timeout returns long.
authorSjur Braendeland <sjur.brandeland@stericsson.com>
Fri, 21 May 2010 02:16:07 +0000 (02:16 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 May 2010 06:57:41 +0000 (23:57 -0700)
Discovered bug when testing on 64bit architecture.
Fixed by using long to store result from wait_event_interruptible_timeout.

Signed-off-by: Sjur Braendeland <sjur.brandeland@stericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/caif/caif_socket.c

index c3a70c5..77e9956 100644 (file)
@@ -920,17 +920,17 @@ wait_connect:
        timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);
 
        release_sock(sk);
-       err = wait_event_interruptible_timeout(*sk_sleep(sk),
+       err = -ERESTARTSYS;
+       timeo = wait_event_interruptible_timeout(*sk_sleep(sk),
                        sk->sk_state != CAIF_CONNECTING,
                        timeo);
        lock_sock(sk);
-       if (err < 0)
+       if (timeo < 0)
                goto out; /* -ERESTARTSYS */
-       if (err == 0 && sk->sk_state != CAIF_CONNECTED) {
-               err = -ETIMEDOUT;
-               goto out;
-       }
 
+       err = -ETIMEDOUT;
+       if (timeo == 0 && sk->sk_state != CAIF_CONNECTED)
+               goto out;
        if (sk->sk_state != CAIF_CONNECTED) {
                sock->state = SS_UNCONNECTED;
                err = sock_error(sk);
@@ -945,7 +945,6 @@ out:
        return err;
 }
 
-
 /*
  * caif_release() - Disconnect a CAIF Socket
  * Copied and modified af_irda.c:irda_release().