@@ -188,17 +188,24 @@ static inline void ccid3_hc_tx_update_win_count(struct ccid3_hc_tx_sock *hc,
188
188
189
189
static void ccid3_hc_tx_no_feedback_timer (struct timer_list * t )
190
190
{
191
- struct ccid3_hc_tx_sock * hc = from_timer (hc , t , tx_no_feedback_timer );
192
- struct sock * sk = hc -> sk ;
191
+ struct dccp_sock * dp = from_timer (dp , t , dccps_ccid_timer );
192
+ struct ccid3_hc_tx_sock * hc ;
193
+ struct sock * sk = (struct sock * )dp ;
193
194
unsigned long t_nfb = USEC_PER_SEC / 5 ;
194
195
195
196
bh_lock_sock (sk );
197
+
198
+ if (inet_sk_state_load (sk ) == DCCP_CLOSED )
199
+ goto out ;
200
+
196
201
if (sock_owned_by_user (sk )) {
197
202
/* Try again later. */
198
203
/* XXX: set some sensible MIB */
199
204
goto restart_timer ;
200
205
}
201
206
207
+ hc = ccid_priv (dp -> dccps_hc_tx_ccid );
208
+
202
209
ccid3_pr_debug ("%s(%p, state=%s) - entry\n" , dccp_role (sk ), sk ,
203
210
ccid3_tx_state_name (hc -> tx_state ));
204
211
@@ -254,8 +261,8 @@ static void ccid3_hc_tx_no_feedback_timer(struct timer_list *t)
254
261
t_nfb = max (hc -> tx_t_rto , 2 * hc -> tx_t_ipi );
255
262
256
263
restart_timer :
257
- sk_reset_timer (sk , & hc -> tx_no_feedback_timer ,
258
- jiffies + usecs_to_jiffies (t_nfb ));
264
+ sk_reset_timer (sk , & dp -> dccps_ccid_timer ,
265
+ jiffies + usecs_to_jiffies (t_nfb ));
259
266
out :
260
267
bh_unlock_sock (sk );
261
268
sock_put (sk );
@@ -285,7 +292,7 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, struct sk_buff *skb)
285
292
return - EBADMSG ;
286
293
287
294
if (hc -> tx_state == TFRC_SSTATE_NO_SENT ) {
288
- sk_reset_timer (sk , & hc -> tx_no_feedback_timer , (jiffies +
295
+ sk_reset_timer (sk , & dp -> dccps_ccid_timer , (jiffies +
289
296
usecs_to_jiffies (TFRC_INITIAL_TIMEOUT )));
290
297
hc -> tx_last_win_count = 0 ;
291
298
hc -> tx_t_last_win_count = now ;
@@ -359,6 +366,7 @@ static void ccid3_hc_tx_packet_sent(struct sock *sk, unsigned int len)
359
366
static void ccid3_hc_tx_packet_recv (struct sock * sk , struct sk_buff * skb )
360
367
{
361
368
struct ccid3_hc_tx_sock * hc = ccid3_hc_tx_sk (sk );
369
+ struct dccp_sock * dp = dccp_sk (sk );
362
370
struct tfrc_tx_hist_entry * acked ;
363
371
ktime_t now ;
364
372
unsigned long t_nfb ;
@@ -425,7 +433,7 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
425
433
(unsigned int )(hc -> tx_x >> 6 ));
426
434
427
435
/* unschedule no feedback timer */
428
- sk_stop_timer (sk , & hc -> tx_no_feedback_timer );
436
+ sk_stop_timer (sk , & dp -> dccps_ccid_timer );
429
437
430
438
/*
431
439
* As we have calculated new ipi, delta, t_nom it is possible
@@ -450,8 +458,8 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
450
458
"expire in %lu jiffies (%luus)\n" ,
451
459
dccp_role (sk ), sk , usecs_to_jiffies (t_nfb ), t_nfb );
452
460
453
- sk_reset_timer (sk , & hc -> tx_no_feedback_timer ,
454
- jiffies + usecs_to_jiffies (t_nfb ));
461
+ sk_reset_timer (sk , & dp -> dccps_ccid_timer ,
462
+ jiffies + usecs_to_jiffies (t_nfb ));
455
463
}
456
464
457
465
static int ccid3_hc_tx_parse_options (struct sock * sk , u8 packet_type ,
@@ -493,21 +501,23 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, u8 packet_type,
493
501
494
502
static int ccid3_hc_tx_init (struct ccid * ccid , struct sock * sk )
495
503
{
504
+ struct dccp_sock * dp = dccp_sk (sk );
496
505
struct ccid3_hc_tx_sock * hc = ccid_priv (ccid );
497
506
498
507
hc -> tx_state = TFRC_SSTATE_NO_SENT ;
499
508
hc -> tx_hist = NULL ;
500
509
hc -> sk = sk ;
501
- timer_setup (& hc -> tx_no_feedback_timer ,
510
+ timer_setup (& dp -> dccps_ccid_timer ,
502
511
ccid3_hc_tx_no_feedback_timer , 0 );
503
512
return 0 ;
504
513
}
505
514
506
515
static void ccid3_hc_tx_exit (struct sock * sk )
507
516
{
517
+ struct dccp_sock * dp = dccp_sk (sk );
508
518
struct ccid3_hc_tx_sock * hc = ccid3_hc_tx_sk (sk );
509
519
510
- sk_stop_timer (sk , & hc -> tx_no_feedback_timer );
520
+ sk_stop_timer (sk , & dp -> dccps_ccid_timer );
511
521
tfrc_tx_hist_purge (& hc -> tx_hist );
512
522
}
513
523
0 commit comments