diff options
| author | Ying Xue <ying.xue@windriver.com> | 2014-11-25 22:41:53 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-11-26 12:30:17 -0500 |
| commit | bc6fecd4098df2d21b056486e5b418c84be95032 (patch) | |
| tree | 4b37da9bbd5fda66bba92558de5e6c9dfe97b7f6 /net/tipc | |
| parent | 58dc55f25631178ee74cd27185956a8f7dcb3e32 (diff) | |
tipc: use generic SKB list APIs to manage deferred queue of link
Use standard SKB list APIs associated with struct sk_buff_head to
manage link's deferred queue, simplifying relevant code.
Signed-off-by: Ying Xue <ying.xue@windriver.com>
Reviewed-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc')
| -rw-r--r-- | net/tipc/bcast.c | 20 | ||||
| -rw-r--r-- | net/tipc/link.c | 74 | ||||
| -rw-r--r-- | net/tipc/link.h | 11 | ||||
| -rw-r--r-- | net/tipc/node.c | 4 | ||||
| -rw-r--r-- | net/tipc/node.h | 7 |
5 files changed, 47 insertions, 69 deletions
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c index 4a1a3c8627d0..7b238b1f339b 100644 --- a/net/tipc/bcast.c +++ b/net/tipc/bcast.c | |||
| @@ -352,6 +352,8 @@ void tipc_bclink_update_link_state(struct tipc_node *n_ptr, u32 last_sent) | |||
| 352 | buf = tipc_buf_acquire(INT_H_SIZE); | 352 | buf = tipc_buf_acquire(INT_H_SIZE); |
| 353 | if (buf) { | 353 | if (buf) { |
| 354 | struct tipc_msg *msg = buf_msg(buf); | 354 | struct tipc_msg *msg = buf_msg(buf); |
| 355 | struct sk_buff *skb = skb_peek(&n_ptr->bclink.deferred_queue); | ||
| 356 | u32 to = skb ? buf_seqno(skb) - 1 : n_ptr->bclink.last_sent; | ||
| 355 | 357 | ||
| 356 | tipc_msg_init(msg, BCAST_PROTOCOL, STATE_MSG, | 358 | tipc_msg_init(msg, BCAST_PROTOCOL, STATE_MSG, |
| 357 | INT_H_SIZE, n_ptr->addr); | 359 | INT_H_SIZE, n_ptr->addr); |
| @@ -359,9 +361,7 @@ void tipc_bclink_update_link_state(struct tipc_node *n_ptr, u32 last_sent) | |||
| 359 | msg_set_mc_netid(msg, tipc_net_id); | 361 | msg_set_mc_netid(msg, tipc_net_id); |
| 360 | msg_set_bcast_ack(msg, n_ptr->bclink.last_in); | 362 | msg_set_bcast_ack(msg, n_ptr->bclink.last_in); |
| 361 | msg_set_bcgap_after(msg, n_ptr->bclink.last_in); | 363 | msg_set_bcgap_after(msg, n_ptr->bclink.last_in); |
| 362 | msg_set_bcgap_to(msg, n_ptr->bclink.deferred_head | 364 | msg_set_bcgap_to(msg, to); |
| 363 | ? buf_seqno(n_ptr->bclink.deferred_head) - 1 | ||
| 364 | : n_ptr->bclink.last_sent); | ||
| 365 | 365 | ||
| 366 | tipc_bclink_lock(); | 366 | tipc_bclink_lock(); |
| 367 | tipc_bearer_send(MAX_BEARERS, buf, NULL); | 367 | tipc_bearer_send(MAX_BEARERS, buf, NULL); |
| @@ -574,31 +574,26 @@ receive: | |||
| 574 | if (node->bclink.last_in == node->bclink.last_sent) | 574 | if (node->bclink.last_in == node->bclink.last_sent) |
| 575 | goto unlock; | 575 | goto unlock; |
| 576 | 576 | ||
| 577 | if (!node->bclink.deferred_head) { | 577 | if (skb_queue_empty(&node->bclink.deferred_queue)) { |
| 578 | node->bclink.oos_state = 1; | 578 | node->bclink.oos_state = 1; |
| 579 | goto unlock; | 579 | goto unlock; |
| 580 | } | 580 | } |
| 581 | 581 | ||
| 582 | msg = buf_msg(node->bclink.deferred_head); | 582 | msg = buf_msg(skb_peek(&node->bclink.deferred_queue)); |
| 583 | seqno = msg_seqno(msg); | 583 | seqno = msg_seqno(msg); |
| 584 | next_in = mod(next_in + 1); | 584 | next_in = mod(next_in + 1); |
| 585 | if (seqno != next_in) | 585 | if (seqno != next_in) |
| 586 | goto unlock; | 586 | goto unlock; |
| 587 | 587 | ||
| 588 | /* Take in-sequence message from deferred queue & deliver it */ | 588 | /* Take in-sequence message from deferred queue & deliver it */ |
| 589 | buf = node->bclink.deferred_head; | 589 | buf = __skb_dequeue(&node->bclink.deferred_queue); |
| 590 | node->bclink.deferred_head = buf->next; | ||
| 591 | buf->next = NULL; | ||
| 592 | node->bclink.deferred_size--; | ||
| 593 | goto receive; | 590 | goto receive; |
| 594 | } | 591 | } |
| 595 | 592 | ||
| 596 | /* Handle out-of-sequence broadcast message */ | 593 | /* Handle out-of-sequence broadcast message */ |
| 597 | if (less(next_in, seqno)) { | 594 | if (less(next_in, seqno)) { |
| 598 | deferred = tipc_link_defer_pkt(&node->bclink.deferred_head, | 595 | deferred = tipc_link_defer_pkt(&node->bclink.deferred_queue, |
| 599 | &node->bclink.deferred_tail, | ||
| 600 | buf); | 596 | buf); |
| 601 | node->bclink.deferred_size += deferred; | ||
| 602 | bclink_update_last_sent(node, seqno); | 597 | bclink_update_last_sent(node, seqno); |
| 603 | buf = NULL; | 598 | buf = NULL; |
| 604 | } | 599 | } |
| @@ -954,6 +949,7 @@ int tipc_bclink_init(void) | |||
| 954 | 949 | ||
| 955 | spin_lock_init(&bclink->lock); | 950 | spin_lock_init(&bclink->lock); |
| 956 | __skb_queue_head_init(&bcl->outqueue); | 951 | __skb_queue_head_init(&bcl->outqueue); |
| 952 | __skb_queue_head_init(&bcl->deferred_queue); | ||
| 957 | __skb_queue_head_init(&bcl->waiting_sks); | 953 | __skb_queue_head_init(&bcl->waiting_sks); |
| 958 | bcl->next_out_no = 1; | 954 | bcl->next_out_no = 1; |
| 959 | spin_lock_init(&bclink->node.lock); | 955 | spin_lock_init(&bclink->node.lock); |
diff --git a/net/tipc/link.c b/net/tipc/link.c index 9e94bf935e48..d9c2310e417d 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
| @@ -292,6 +292,7 @@ struct tipc_link *tipc_link_create(struct tipc_node *n_ptr, | |||
| 292 | 292 | ||
| 293 | l_ptr->next_out_no = 1; | 293 | l_ptr->next_out_no = 1; |
| 294 | __skb_queue_head_init(&l_ptr->outqueue); | 294 | __skb_queue_head_init(&l_ptr->outqueue); |
| 295 | __skb_queue_head_init(&l_ptr->deferred_queue); | ||
| 295 | __skb_queue_head_init(&l_ptr->waiting_sks); | 296 | __skb_queue_head_init(&l_ptr->waiting_sks); |
| 296 | 297 | ||
| 297 | link_reset_statistics(l_ptr); | 298 | link_reset_statistics(l_ptr); |
| @@ -398,7 +399,7 @@ void tipc_link_reset_fragments(struct tipc_link *l_ptr) | |||
| 398 | */ | 399 | */ |
| 399 | void tipc_link_purge_queues(struct tipc_link *l_ptr) | 400 | void tipc_link_purge_queues(struct tipc_link *l_ptr) |
| 400 | { | 401 | { |
| 401 | kfree_skb_list(l_ptr->oldest_deferred_in); | 402 | __skb_queue_purge(&l_ptr->deferred_queue); |
| 402 | __skb_queue_purge(&l_ptr->outqueue); | 403 | __skb_queue_purge(&l_ptr->outqueue); |
| 403 | tipc_link_reset_fragments(l_ptr); | 404 | tipc_link_reset_fragments(l_ptr); |
| 404 | } | 405 | } |
| @@ -433,7 +434,7 @@ void tipc_link_reset(struct tipc_link *l_ptr) | |||
| 433 | 434 | ||
| 434 | /* Clean up all queues: */ | 435 | /* Clean up all queues: */ |
| 435 | __skb_queue_purge(&l_ptr->outqueue); | 436 | __skb_queue_purge(&l_ptr->outqueue); |
| 436 | kfree_skb_list(l_ptr->oldest_deferred_in); | 437 | __skb_queue_purge(&l_ptr->deferred_queue); |
| 437 | if (!skb_queue_empty(&l_ptr->waiting_sks)) { | 438 | if (!skb_queue_empty(&l_ptr->waiting_sks)) { |
| 438 | skb_queue_splice_init(&l_ptr->waiting_sks, &owner->waiting_sks); | 439 | skb_queue_splice_init(&l_ptr->waiting_sks, &owner->waiting_sks); |
| 439 | owner->action_flags |= TIPC_WAKEUP_USERS; | 440 | owner->action_flags |= TIPC_WAKEUP_USERS; |
| @@ -442,9 +443,6 @@ void tipc_link_reset(struct tipc_link *l_ptr) | |||
| 442 | l_ptr->unacked_window = 0; | 443 | l_ptr->unacked_window = 0; |
| 443 | l_ptr->checkpoint = 1; | 444 | l_ptr->checkpoint = 1; |
| 444 | l_ptr->next_out_no = 1; | 445 | l_ptr->next_out_no = 1; |
| 445 | l_ptr->deferred_inqueue_sz = 0; | ||
| 446 | l_ptr->oldest_deferred_in = NULL; | ||
| 447 | l_ptr->newest_deferred_in = NULL; | ||
| 448 | l_ptr->fsm_msg_cnt = 0; | 446 | l_ptr->fsm_msg_cnt = 0; |
| 449 | l_ptr->stale_count = 0; | 447 | l_ptr->stale_count = 0; |
| 450 | link_reset_statistics(l_ptr); | 448 | link_reset_statistics(l_ptr); |
| @@ -974,19 +972,23 @@ void tipc_link_retransmit(struct tipc_link *l_ptr, struct sk_buff *skb, | |||
| 974 | static struct sk_buff *link_insert_deferred_queue(struct tipc_link *l_ptr, | 972 | static struct sk_buff *link_insert_deferred_queue(struct tipc_link *l_ptr, |
| 975 | struct sk_buff *buf) | 973 | struct sk_buff *buf) |
| 976 | { | 974 | { |
| 975 | struct sk_buff_head head; | ||
| 976 | struct sk_buff *skb = NULL; | ||
| 977 | u32 seq_no; | 977 | u32 seq_no; |
| 978 | 978 | ||
| 979 | if (l_ptr->oldest_deferred_in == NULL) | 979 | if (skb_queue_empty(&l_ptr->deferred_queue)) |
| 980 | return buf; | 980 | return buf; |
| 981 | 981 | ||
| 982 | seq_no = buf_seqno(l_ptr->oldest_deferred_in); | 982 | seq_no = buf_seqno(skb_peek(&l_ptr->deferred_queue)); |
| 983 | if (seq_no == mod(l_ptr->next_in_no)) { | 983 | if (seq_no == mod(l_ptr->next_in_no)) { |
| 984 | l_ptr->newest_deferred_in->next = buf; | 984 | __skb_queue_head_init(&head); |
| 985 | buf = l_ptr->oldest_deferred_in; | 985 | skb_queue_splice_tail_init(&l_ptr->deferred_queue, &head); |
| 986 | l_ptr->oldest_deferred_in = NULL; | 986 | skb = head.next; |
| 987 | l_ptr->deferred_inqueue_sz = 0; | 987 | skb->prev = NULL; |
| 988 | head.prev->next = buf; | ||
| 989 | head.prev->prev = NULL; | ||
| 988 | } | 990 | } |
| 989 | return buf; | 991 | return skb; |
| 990 | } | 992 | } |
| 991 | 993 | ||
| 992 | /** | 994 | /** |
| @@ -1170,7 +1172,7 @@ void tipc_rcv(struct sk_buff *head, struct tipc_bearer *b_ptr) | |||
| 1170 | continue; | 1172 | continue; |
| 1171 | } | 1173 | } |
| 1172 | l_ptr->next_in_no++; | 1174 | l_ptr->next_in_no++; |
| 1173 | if (unlikely(l_ptr->oldest_deferred_in)) | 1175 | if (unlikely(!skb_queue_empty(&l_ptr->deferred_queue))) |
| 1174 | head = link_insert_deferred_queue(l_ptr, head); | 1176 | head = link_insert_deferred_queue(l_ptr, head); |
| 1175 | 1177 | ||
| 1176 | if (unlikely(++l_ptr->unacked_window >= TIPC_MIN_LINK_WIN)) { | 1178 | if (unlikely(++l_ptr->unacked_window >= TIPC_MIN_LINK_WIN)) { |
| @@ -1273,48 +1275,37 @@ static int tipc_link_input(struct tipc_link *l, struct sk_buff *buf) | |||
| 1273 | * | 1275 | * |
| 1274 | * Returns increase in queue length (i.e. 0 or 1) | 1276 | * Returns increase in queue length (i.e. 0 or 1) |
| 1275 | */ | 1277 | */ |
| 1276 | u32 tipc_link_defer_pkt(struct sk_buff **head, struct sk_buff **tail, | 1278 | u32 tipc_link_defer_pkt(struct sk_buff_head *list, struct sk_buff *skb) |
| 1277 | struct sk_buff *buf) | ||
| 1278 | { | 1279 | { |
| 1279 | struct sk_buff *queue_buf; | 1280 | struct sk_buff *skb1; |
| 1280 | struct sk_buff **prev; | 1281 | u32 seq_no = buf_seqno(skb); |
| 1281 | u32 seq_no = buf_seqno(buf); | ||
| 1282 | |||
| 1283 | buf->next = NULL; | ||
| 1284 | 1282 | ||
| 1285 | /* Empty queue ? */ | 1283 | /* Empty queue ? */ |
| 1286 | if (*head == NULL) { | 1284 | if (skb_queue_empty(list)) { |
| 1287 | *head = *tail = buf; | 1285 | __skb_queue_tail(list, skb); |
| 1288 | return 1; | 1286 | return 1; |
| 1289 | } | 1287 | } |
| 1290 | 1288 | ||
| 1291 | /* Last ? */ | 1289 | /* Last ? */ |
| 1292 | if (less(buf_seqno(*tail), seq_no)) { | 1290 | if (less(buf_seqno(skb_peek_tail(list)), seq_no)) { |
| 1293 | (*tail)->next = buf; | 1291 | __skb_queue_tail(list, skb); |
| 1294 | *tail = buf; | ||
| 1295 | return 1; | 1292 | return 1; |
| 1296 | } | 1293 | } |
| 1297 | 1294 | ||
| 1298 | /* Locate insertion point in queue, then insert; discard if duplicate */ | 1295 | /* Locate insertion point in queue, then insert; discard if duplicate */ |
| 1299 | prev = head; | 1296 | skb_queue_walk(list, skb1) { |
| 1300 | queue_buf = *head; | 1297 | u32 curr_seqno = buf_seqno(skb1); |
| 1301 | for (;;) { | ||
| 1302 | u32 curr_seqno = buf_seqno(queue_buf); | ||
| 1303 | 1298 | ||
| 1304 | if (seq_no == curr_seqno) { | 1299 | if (seq_no == curr_seqno) { |
| 1305 | kfree_skb(buf); | 1300 | kfree_skb(skb); |
| 1306 | return 0; | 1301 | return 0; |
| 1307 | } | 1302 | } |
| 1308 | 1303 | ||
| 1309 | if (less(seq_no, curr_seqno)) | 1304 | if (less(seq_no, curr_seqno)) |
| 1310 | break; | 1305 | break; |
| 1311 | |||
| 1312 | prev = &queue_buf->next; | ||
| 1313 | queue_buf = queue_buf->next; | ||
| 1314 | } | 1306 | } |
| 1315 | 1307 | ||
| 1316 | buf->next = queue_buf; | 1308 | __skb_queue_before(list, skb1, skb); |
| 1317 | *prev = buf; | ||
| 1318 | return 1; | 1309 | return 1; |
| 1319 | } | 1310 | } |
| 1320 | 1311 | ||
| @@ -1344,15 +1335,14 @@ static void link_handle_out_of_seq_msg(struct tipc_link *l_ptr, | |||
| 1344 | return; | 1335 | return; |
| 1345 | } | 1336 | } |
| 1346 | 1337 | ||
| 1347 | if (tipc_link_defer_pkt(&l_ptr->oldest_deferred_in, | 1338 | if (tipc_link_defer_pkt(&l_ptr->deferred_queue, buf)) { |
| 1348 | &l_ptr->newest_deferred_in, buf)) { | ||
| 1349 | l_ptr->deferred_inqueue_sz++; | ||
| 1350 | l_ptr->stats.deferred_recv++; | 1339 | l_ptr->stats.deferred_recv++; |
| 1351 | TIPC_SKB_CB(buf)->deferred = true; | 1340 | TIPC_SKB_CB(buf)->deferred = true; |
| 1352 | if ((l_ptr->deferred_inqueue_sz % 16) == 1) | 1341 | if ((skb_queue_len(&l_ptr->deferred_queue) % 16) == 1) |
| 1353 | tipc_link_proto_xmit(l_ptr, STATE_MSG, 0, 0, 0, 0, 0); | 1342 | tipc_link_proto_xmit(l_ptr, STATE_MSG, 0, 0, 0, 0, 0); |
| 1354 | } else | 1343 | } else { |
| 1355 | l_ptr->stats.duplicates++; | 1344 | l_ptr->stats.duplicates++; |
| 1345 | } | ||
| 1356 | } | 1346 | } |
| 1357 | 1347 | ||
| 1358 | /* | 1348 | /* |
| @@ -1388,8 +1378,8 @@ void tipc_link_proto_xmit(struct tipc_link *l_ptr, u32 msg_typ, int probe_msg, | |||
| 1388 | if (l_ptr->next_out) | 1378 | if (l_ptr->next_out) |
| 1389 | next_sent = buf_seqno(l_ptr->next_out); | 1379 | next_sent = buf_seqno(l_ptr->next_out); |
| 1390 | msg_set_next_sent(msg, next_sent); | 1380 | msg_set_next_sent(msg, next_sent); |
| 1391 | if (l_ptr->oldest_deferred_in) { | 1381 | if (!skb_queue_empty(&l_ptr->deferred_queue)) { |
| 1392 | u32 rec = buf_seqno(l_ptr->oldest_deferred_in); | 1382 | u32 rec = buf_seqno(skb_peek(&l_ptr->deferred_queue)); |
| 1393 | gap = mod(rec - mod(l_ptr->next_in_no)); | 1383 | gap = mod(rec - mod(l_ptr->next_in_no)); |
| 1394 | } | 1384 | } |
| 1395 | msg_set_seq_gap(msg, gap); | 1385 | msg_set_seq_gap(msg, gap); |
diff --git a/net/tipc/link.h b/net/tipc/link.h index 96f1e1bf0798..de7b8833641a 100644 --- a/net/tipc/link.h +++ b/net/tipc/link.h | |||
| @@ -124,9 +124,7 @@ struct tipc_stats { | |||
| 124 | * @last_retransmitted: sequence number of most recently retransmitted message | 124 | * @last_retransmitted: sequence number of most recently retransmitted message |
| 125 | * @stale_count: # of identical retransmit requests made by peer | 125 | * @stale_count: # of identical retransmit requests made by peer |
| 126 | * @next_in_no: next sequence number to expect for inbound messages | 126 | * @next_in_no: next sequence number to expect for inbound messages |
| 127 | * @deferred_inqueue_sz: # of messages in inbound message queue | 127 | * @deferred_queue: deferred queue saved OOS b'cast message received from node |
| 128 | * @oldest_deferred_in: ptr to first inbound message in queue | ||
| 129 | * @newest_deferred_in: ptr to last inbound message in queue | ||
| 130 | * @unacked_window: # of inbound messages rx'd without ack'ing back to peer | 128 | * @unacked_window: # of inbound messages rx'd without ack'ing back to peer |
| 131 | * @next_out: ptr to first unsent outbound message in queue | 129 | * @next_out: ptr to first unsent outbound message in queue |
| 132 | * @waiting_sks: linked list of sockets waiting for link congestion to abate | 130 | * @waiting_sks: linked list of sockets waiting for link congestion to abate |
| @@ -178,9 +176,7 @@ struct tipc_link { | |||
| 178 | 176 | ||
| 179 | /* Reception */ | 177 | /* Reception */ |
| 180 | u32 next_in_no; | 178 | u32 next_in_no; |
| 181 | u32 deferred_inqueue_sz; | 179 | struct sk_buff_head deferred_queue; |
| 182 | struct sk_buff *oldest_deferred_in; | ||
| 183 | struct sk_buff *newest_deferred_in; | ||
| 184 | u32 unacked_window; | 180 | u32 unacked_window; |
| 185 | 181 | ||
| 186 | /* Congestion handling */ | 182 | /* Congestion handling */ |
| @@ -224,8 +220,7 @@ void tipc_link_bundle_rcv(struct sk_buff *buf); | |||
| 224 | void tipc_link_proto_xmit(struct tipc_link *l_ptr, u32 msg_typ, int prob, | 220 | void tipc_link_proto_xmit(struct tipc_link *l_ptr, u32 msg_typ, int prob, |
| 225 | u32 gap, u32 tolerance, u32 priority, u32 acked_mtu); | 221 | u32 gap, u32 tolerance, u32 priority, u32 acked_mtu); |
| 226 | void tipc_link_push_packets(struct tipc_link *l_ptr); | 222 | void tipc_link_push_packets(struct tipc_link *l_ptr); |
| 227 | u32 tipc_link_defer_pkt(struct sk_buff **head, struct sk_buff **tail, | 223 | u32 tipc_link_defer_pkt(struct sk_buff_head *list, struct sk_buff *buf); |
| 228 | struct sk_buff *buf); | ||
| 229 | void tipc_link_set_queue_limits(struct tipc_link *l_ptr, u32 window); | 224 | void tipc_link_set_queue_limits(struct tipc_link *l_ptr, u32 window); |
| 230 | void tipc_link_retransmit(struct tipc_link *l_ptr, | 225 | void tipc_link_retransmit(struct tipc_link *l_ptr, |
| 231 | struct sk_buff *start, u32 retransmits); | 226 | struct sk_buff *start, u32 retransmits); |
diff --git a/net/tipc/node.c b/net/tipc/node.c index 17b8092f9c40..69b96be09a86 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c | |||
| @@ -116,6 +116,7 @@ struct tipc_node *tipc_node_create(u32 addr) | |||
| 116 | INIT_LIST_HEAD(&n_ptr->publ_list); | 116 | INIT_LIST_HEAD(&n_ptr->publ_list); |
| 117 | INIT_LIST_HEAD(&n_ptr->conn_sks); | 117 | INIT_LIST_HEAD(&n_ptr->conn_sks); |
| 118 | __skb_queue_head_init(&n_ptr->waiting_sks); | 118 | __skb_queue_head_init(&n_ptr->waiting_sks); |
| 119 | __skb_queue_head_init(&n_ptr->bclink.deferred_queue); | ||
| 119 | 120 | ||
| 120 | hlist_add_head_rcu(&n_ptr->hash, &node_htable[tipc_hashfn(addr)]); | 121 | hlist_add_head_rcu(&n_ptr->hash, &node_htable[tipc_hashfn(addr)]); |
| 121 | 122 | ||
| @@ -381,8 +382,7 @@ static void node_lost_contact(struct tipc_node *n_ptr) | |||
| 381 | 382 | ||
| 382 | /* Flush broadcast link info associated with lost node */ | 383 | /* Flush broadcast link info associated with lost node */ |
| 383 | if (n_ptr->bclink.recv_permitted) { | 384 | if (n_ptr->bclink.recv_permitted) { |
| 384 | kfree_skb_list(n_ptr->bclink.deferred_head); | 385 | __skb_queue_purge(&n_ptr->bclink.deferred_queue); |
| 385 | n_ptr->bclink.deferred_size = 0; | ||
| 386 | 386 | ||
| 387 | if (n_ptr->bclink.reasm_buf) { | 387 | if (n_ptr->bclink.reasm_buf) { |
| 388 | kfree_skb(n_ptr->bclink.reasm_buf); | 388 | kfree_skb(n_ptr->bclink.reasm_buf); |
diff --git a/net/tipc/node.h b/net/tipc/node.h index f1994511f033..cbe0e950f1cc 100644 --- a/net/tipc/node.h +++ b/net/tipc/node.h | |||
| @@ -71,9 +71,7 @@ enum { | |||
| 71 | * @last_in: sequence # of last in-sequence b'cast message received from node | 71 | * @last_in: sequence # of last in-sequence b'cast message received from node |
| 72 | * @last_sent: sequence # of last b'cast message sent by node | 72 | * @last_sent: sequence # of last b'cast message sent by node |
| 73 | * @oos_state: state tracker for handling OOS b'cast messages | 73 | * @oos_state: state tracker for handling OOS b'cast messages |
| 74 | * @deferred_size: number of OOS b'cast messages in deferred queue | 74 | * @deferred_queue: deferred queue saved OOS b'cast message received from node |
| 75 | * @deferred_head: oldest OOS b'cast message received from node | ||
| 76 | * @deferred_tail: newest OOS b'cast message received from node | ||
| 77 | * @reasm_buf: broadcast reassembly queue head from node | 75 | * @reasm_buf: broadcast reassembly queue head from node |
| 78 | * @recv_permitted: true if node is allowed to receive b'cast messages | 76 | * @recv_permitted: true if node is allowed to receive b'cast messages |
| 79 | */ | 77 | */ |
| @@ -83,8 +81,7 @@ struct tipc_node_bclink { | |||
| 83 | u32 last_sent; | 81 | u32 last_sent; |
| 84 | u32 oos_state; | 82 | u32 oos_state; |
| 85 | u32 deferred_size; | 83 | u32 deferred_size; |
| 86 | struct sk_buff *deferred_head; | 84 | struct sk_buff_head deferred_queue; |
| 87 | struct sk_buff *deferred_tail; | ||
| 88 | struct sk_buff *reasm_buf; | 85 | struct sk_buff *reasm_buf; |
| 89 | bool recv_permitted; | 86 | bool recv_permitted; |
| 90 | }; | 87 | }; |
