|
@@ -175,14 +175,12 @@ void dccp_write_space(struct sock *sk)
|
|
|
/**
|
|
|
* dccp_wait_for_ccid - Wait for ccid to tell us we can send a packet
|
|
|
* @sk: socket to wait for
|
|
|
- * @timeo: for how long
|
|
|
*/
|
|
|
-static int dccp_wait_for_ccid(struct sock *sk, struct sk_buff *skb,
|
|
|
- long *timeo)
|
|
|
+static int dccp_wait_for_ccid(struct sock *sk, struct sk_buff *skb)
|
|
|
{
|
|
|
struct dccp_sock *dp = dccp_sk(sk);
|
|
|
DEFINE_WAIT(wait);
|
|
|
- long delay;
|
|
|
+ unsigned long delay;
|
|
|
int rc;
|
|
|
|
|
|
while (1) {
|
|
@@ -190,8 +188,6 @@ static int dccp_wait_for_ccid(struct sock *sk, struct sk_buff *skb,
|
|
|
|
|
|
if (sk->sk_err)
|
|
|
goto do_error;
|
|
|
- if (!*timeo)
|
|
|
- goto do_nonblock;
|
|
|
if (signal_pending(current))
|
|
|
goto do_interrupted;
|
|
|
|
|
@@ -199,12 +195,9 @@ static int dccp_wait_for_ccid(struct sock *sk, struct sk_buff *skb,
|
|
|
if (rc <= 0)
|
|
|
break;
|
|
|
delay = msecs_to_jiffies(rc);
|
|
|
- if (delay > *timeo || delay < 0)
|
|
|
- goto do_nonblock;
|
|
|
-
|
|
|
sk->sk_write_pending++;
|
|
|
release_sock(sk);
|
|
|
- *timeo -= schedule_timeout(delay);
|
|
|
+ schedule_timeout(delay);
|
|
|
lock_sock(sk);
|
|
|
sk->sk_write_pending--;
|
|
|
}
|
|
@@ -215,11 +208,8 @@ out:
|
|
|
do_error:
|
|
|
rc = -EPIPE;
|
|
|
goto out;
|
|
|
-do_nonblock:
|
|
|
- rc = -EAGAIN;
|
|
|
- goto out;
|
|
|
do_interrupted:
|
|
|
- rc = sock_intr_errno(*timeo);
|
|
|
+ rc = -EINTR;
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
@@ -240,8 +230,6 @@ void dccp_write_xmit(struct sock *sk, int block)
|
|
|
{
|
|
|
struct dccp_sock *dp = dccp_sk(sk);
|
|
|
struct sk_buff *skb;
|
|
|
- long timeo = DCCP_XMIT_TIMEO; /* If a packet is taking longer than
|
|
|
- this we have other issues */
|
|
|
|
|
|
while ((skb = skb_peek(&sk->sk_write_queue))) {
|
|
|
int err = ccid_hc_tx_send_packet(dp->dccps_hc_tx_ccid, sk, skb);
|
|
@@ -251,10 +239,8 @@ void dccp_write_xmit(struct sock *sk, int block)
|
|
|
sk_reset_timer(sk, &dp->dccps_xmit_timer,
|
|
|
msecs_to_jiffies(err)+jiffies);
|
|
|
break;
|
|
|
- } else {
|
|
|
- err = dccp_wait_for_ccid(sk, skb, &timeo);
|
|
|
- timeo = DCCP_XMIT_TIMEO;
|
|
|
- }
|
|
|
+ } else
|
|
|
+ err = dccp_wait_for_ccid(sk, skb);
|
|
|
if (err)
|
|
|
DCCP_BUG("err=%d after dccp_wait_for_ccid", err);
|
|
|
}
|