diff options
Diffstat (limited to 'net/tipc/link.c')
| -rw-r--r-- | net/tipc/link.c | 98 | 
1 files changed, 51 insertions, 47 deletions
| diff --git a/net/tipc/link.c b/net/tipc/link.c index 2a26a16e269f..d60113ba4b1b 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
| @@ -51,6 +51,12 @@ | |||
| 51 | 51 | ||
| 52 | 52 | ||
| 53 | /* | 53 | /* | 
| 54 | * Out-of-range value for link session numbers | ||
| 55 | */ | ||
| 56 | |||
| 57 | #define INVALID_SESSION 0x10000 | ||
| 58 | |||
| 59 | /* | ||
| 54 | * Limit for deferred reception queue: | 60 | * Limit for deferred reception queue: | 
| 55 | */ | 61 | */ | 
| 56 | 62 | ||
| @@ -147,9 +153,21 @@ static void link_print(struct link *l_ptr, struct print_buf *buf, | |||
| 147 | 153 | ||
| 148 | #define LINK_LOG_BUF_SIZE 0 | 154 | #define LINK_LOG_BUF_SIZE 0 | 
| 149 | 155 | ||
| 150 | #define dbg_link(fmt, arg...) do {if (LINK_LOG_BUF_SIZE) tipc_printf(&l_ptr->print_buf, fmt, ## arg); } while(0) | 156 | #define dbg_link(fmt, arg...) \ | 
| 151 | #define dbg_link_msg(msg, txt) do {if (LINK_LOG_BUF_SIZE) tipc_msg_print(&l_ptr->print_buf, msg, txt); } while(0) | 157 | do { \ | 
| 152 | #define dbg_link_state(txt) do {if (LINK_LOG_BUF_SIZE) link_print(l_ptr, &l_ptr->print_buf, txt); } while(0) | 158 | if (LINK_LOG_BUF_SIZE) \ | 
| 159 | tipc_printf(&l_ptr->print_buf, fmt, ## arg); \ | ||
| 160 | } while (0) | ||
| 161 | #define dbg_link_msg(msg, txt) \ | ||
| 162 | do { \ | ||
| 163 | if (LINK_LOG_BUF_SIZE) \ | ||
| 164 | tipc_msg_dbg(&l_ptr->print_buf, msg, txt); \ | ||
| 165 | } while (0) | ||
| 166 | #define dbg_link_state(txt) \ | ||
| 167 | do { \ | ||
| 168 | if (LINK_LOG_BUF_SIZE) \ | ||
| 169 | link_print(l_ptr, &l_ptr->print_buf, txt); \ | ||
| 170 | } while (0) | ||
| 153 | #define dbg_link_dump() do { \ | 171 | #define dbg_link_dump() do { \ | 
| 154 | if (LINK_LOG_BUF_SIZE) { \ | 172 | if (LINK_LOG_BUF_SIZE) { \ | 
| 155 | tipc_printf(LOG, "\n\nDumping link <%s>:\n", l_ptr->name); \ | 173 | tipc_printf(LOG, "\n\nDumping link <%s>:\n", l_ptr->name); \ | 
| @@ -450,9 +468,9 @@ struct link *tipc_link_create(struct bearer *b_ptr, const u32 peer, | |||
| 450 | 468 | ||
| 451 | l_ptr->pmsg = (struct tipc_msg *)&l_ptr->proto_msg; | 469 | l_ptr->pmsg = (struct tipc_msg *)&l_ptr->proto_msg; | 
| 452 | msg = l_ptr->pmsg; | 470 | msg = l_ptr->pmsg; | 
| 453 | msg_init(msg, LINK_PROTOCOL, RESET_MSG, TIPC_OK, INT_H_SIZE, l_ptr->addr); | 471 | msg_init(msg, LINK_PROTOCOL, RESET_MSG, INT_H_SIZE, l_ptr->addr); | 
| 454 | msg_set_size(msg, sizeof(l_ptr->proto_msg)); | 472 | msg_set_size(msg, sizeof(l_ptr->proto_msg)); | 
| 455 | msg_set_session(msg, tipc_random); | 473 | msg_set_session(msg, (tipc_random & 0xffff)); | 
| 456 | msg_set_bearer_id(msg, b_ptr->identity); | 474 | msg_set_bearer_id(msg, b_ptr->identity); | 
| 457 | strcpy((char *)msg_data(msg), if_name); | 475 | strcpy((char *)msg_data(msg), if_name); | 
| 458 | 476 | ||
| @@ -693,10 +711,10 @@ void tipc_link_reset(struct link *l_ptr) | |||
| 693 | u32 checkpoint = l_ptr->next_in_no; | 711 | u32 checkpoint = l_ptr->next_in_no; | 
| 694 | int was_active_link = tipc_link_is_active(l_ptr); | 712 | int was_active_link = tipc_link_is_active(l_ptr); | 
| 695 | 713 | ||
| 696 | msg_set_session(l_ptr->pmsg, msg_session(l_ptr->pmsg) + 1); | 714 | msg_set_session(l_ptr->pmsg, ((msg_session(l_ptr->pmsg) + 1) & 0xffff)); | 
| 697 | 715 | ||
| 698 | /* Link is down, accept any session: */ | 716 | /* Link is down, accept any session */ | 
| 699 | l_ptr->peer_session = 0; | 717 | l_ptr->peer_session = INVALID_SESSION; | 
| 700 | 718 | ||
| 701 | /* Prepare for max packet size negotiation */ | 719 | /* Prepare for max packet size negotiation */ | 
| 702 | link_init_max_pkt(l_ptr); | 720 | link_init_max_pkt(l_ptr); | 
| @@ -1110,7 +1128,7 @@ int tipc_link_send_buf(struct link *l_ptr, struct sk_buff *buf) | |||
| 1110 | 1128 | ||
| 1111 | if (bundler) { | 1129 | if (bundler) { | 
| 1112 | msg_init(&bundler_hdr, MSG_BUNDLER, OPEN_MSG, | 1130 | msg_init(&bundler_hdr, MSG_BUNDLER, OPEN_MSG, | 
| 1113 | TIPC_OK, INT_H_SIZE, l_ptr->addr); | 1131 | INT_H_SIZE, l_ptr->addr); | 
| 1114 | skb_copy_to_linear_data(bundler, &bundler_hdr, | 1132 | skb_copy_to_linear_data(bundler, &bundler_hdr, | 
| 1115 | INT_H_SIZE); | 1133 | INT_H_SIZE); | 
| 1116 | skb_trim(bundler, INT_H_SIZE); | 1134 | skb_trim(bundler, INT_H_SIZE); | 
| @@ -1374,7 +1392,7 @@ again: | |||
| 1374 | 1392 | ||
| 1375 | msg_dbg(hdr, ">FRAGMENTING>"); | 1393 | msg_dbg(hdr, ">FRAGMENTING>"); | 
| 1376 | msg_init(&fragm_hdr, MSG_FRAGMENTER, FIRST_FRAGMENT, | 1394 | msg_init(&fragm_hdr, MSG_FRAGMENTER, FIRST_FRAGMENT, | 
| 1377 | TIPC_OK, INT_H_SIZE, msg_destnode(hdr)); | 1395 | INT_H_SIZE, msg_destnode(hdr)); | 
| 1378 | msg_set_link_selector(&fragm_hdr, sender->publ.ref); | 1396 | msg_set_link_selector(&fragm_hdr, sender->publ.ref); | 
| 1379 | msg_set_size(&fragm_hdr, max_pkt); | 1397 | msg_set_size(&fragm_hdr, max_pkt); | 
| 1380 | msg_set_fragm_no(&fragm_hdr, 1); | 1398 | msg_set_fragm_no(&fragm_hdr, 1); | 
| @@ -1543,7 +1561,7 @@ u32 tipc_link_push_packet(struct link *l_ptr) | |||
| 1543 | l_ptr->retransm_queue_head = mod(++r_q_head); | 1561 | l_ptr->retransm_queue_head = mod(++r_q_head); | 
| 1544 | l_ptr->retransm_queue_size = --r_q_size; | 1562 | l_ptr->retransm_queue_size = --r_q_size; | 
| 1545 | l_ptr->stats.retransmitted++; | 1563 | l_ptr->stats.retransmitted++; | 
| 1546 | return TIPC_OK; | 1564 | return 0; | 
| 1547 | } else { | 1565 | } else { | 
| 1548 | l_ptr->stats.bearer_congs++; | 1566 | l_ptr->stats.bearer_congs++; | 
| 1549 | msg_dbg(buf_msg(buf), "|>DEF-RETR>"); | 1567 | msg_dbg(buf_msg(buf), "|>DEF-RETR>"); | 
| @@ -1562,7 +1580,7 @@ u32 tipc_link_push_packet(struct link *l_ptr) | |||
| 1562 | l_ptr->unacked_window = 0; | 1580 | l_ptr->unacked_window = 0; | 
| 1563 | buf_discard(buf); | 1581 | buf_discard(buf); | 
| 1564 | l_ptr->proto_msg_queue = NULL; | 1582 | l_ptr->proto_msg_queue = NULL; | 
| 1565 | return TIPC_OK; | 1583 | return 0; | 
| 1566 | } else { | 1584 | } else { | 
| 1567 | msg_dbg(buf_msg(buf), "|>DEF-PROT>"); | 1585 | msg_dbg(buf_msg(buf), "|>DEF-PROT>"); | 
| 1568 | l_ptr->stats.bearer_congs++; | 1586 | l_ptr->stats.bearer_congs++; | 
| @@ -1586,7 +1604,7 @@ u32 tipc_link_push_packet(struct link *l_ptr) | |||
| 1586 | msg_set_type(msg, CLOSED_MSG); | 1604 | msg_set_type(msg, CLOSED_MSG); | 
| 1587 | msg_dbg(msg, ">PUSH-DATA>"); | 1605 | msg_dbg(msg, ">PUSH-DATA>"); | 
| 1588 | l_ptr->next_out = buf->next; | 1606 | l_ptr->next_out = buf->next; | 
| 1589 | return TIPC_OK; | 1607 | return 0; | 
| 1590 | } else { | 1608 | } else { | 
| 1591 | msg_dbg(msg, "|PUSH-DATA|"); | 1609 | msg_dbg(msg, "|PUSH-DATA|"); | 
| 1592 | l_ptr->stats.bearer_congs++; | 1610 | l_ptr->stats.bearer_congs++; | 
| @@ -1610,8 +1628,8 @@ void tipc_link_push_queue(struct link *l_ptr) | |||
| 1610 | 1628 | ||
| 1611 | do { | 1629 | do { | 
| 1612 | res = tipc_link_push_packet(l_ptr); | 1630 | res = tipc_link_push_packet(l_ptr); | 
| 1613 | } | 1631 | } while (!res); | 
| 1614 | while (res == TIPC_OK); | 1632 | |
| 1615 | if (res == PUSH_FAILED) | 1633 | if (res == PUSH_FAILED) | 
| 1616 | tipc_bearer_schedule(l_ptr->b_ptr, l_ptr); | 1634 | tipc_bearer_schedule(l_ptr->b_ptr, l_ptr); | 
| 1617 | } | 1635 | } | 
| @@ -1651,7 +1669,7 @@ static void link_retransmit_failure(struct link *l_ptr, struct sk_buff *buf) | |||
| 1651 | struct tipc_msg *msg = buf_msg(buf); | 1669 | struct tipc_msg *msg = buf_msg(buf); | 
| 1652 | 1670 | ||
| 1653 | warn("Retransmission failure on link <%s>\n", l_ptr->name); | 1671 | warn("Retransmission failure on link <%s>\n", l_ptr->name); | 
| 1654 | tipc_msg_print(TIPC_OUTPUT, msg, ">RETR-FAIL>"); | 1672 | tipc_msg_dbg(TIPC_OUTPUT, msg, ">RETR-FAIL>"); | 
| 1655 | 1673 | ||
| 1656 | if (l_ptr->addr) { | 1674 | if (l_ptr->addr) { | 
| 1657 | 1675 | ||
| @@ -1748,21 +1766,6 @@ void tipc_link_retransmit(struct link *l_ptr, struct sk_buff *buf, | |||
| 1748 | l_ptr->retransm_queue_head = l_ptr->retransm_queue_size = 0; | 1766 | l_ptr->retransm_queue_head = l_ptr->retransm_queue_size = 0; | 
| 1749 | } | 1767 | } | 
| 1750 | 1768 | ||
| 1751 | /* | ||
| 1752 | * link_recv_non_seq: Receive packets which are outside | ||
| 1753 | * the link sequence flow | ||
| 1754 | */ | ||
| 1755 | |||
| 1756 | static void link_recv_non_seq(struct sk_buff *buf) | ||
| 1757 | { | ||
| 1758 | struct tipc_msg *msg = buf_msg(buf); | ||
| 1759 | |||
| 1760 | if (msg_user(msg) == LINK_CONFIG) | ||
| 1761 | tipc_disc_recv_msg(buf); | ||
| 1762 | else | ||
| 1763 | tipc_bclink_recv_pkt(buf); | ||
| 1764 | } | ||
| 1765 | |||
| 1766 | /** | 1769 | /** | 
| 1767 | * link_insert_deferred_queue - insert deferred messages back into receive chain | 1770 | * link_insert_deferred_queue - insert deferred messages back into receive chain | 
| 1768 | */ | 1771 | */ | 
| @@ -1839,7 +1842,7 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr) | |||
| 1839 | { | 1842 | { | 
| 1840 | read_lock_bh(&tipc_net_lock); | 1843 | read_lock_bh(&tipc_net_lock); | 
| 1841 | while (head) { | 1844 | while (head) { | 
| 1842 | struct bearer *b_ptr; | 1845 | struct bearer *b_ptr = (struct bearer *)tb_ptr; | 
| 1843 | struct node *n_ptr; | 1846 | struct node *n_ptr; | 
| 1844 | struct link *l_ptr; | 1847 | struct link *l_ptr; | 
| 1845 | struct sk_buff *crs; | 1848 | struct sk_buff *crs; | 
| @@ -1850,9 +1853,6 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr) | |||
| 1850 | u32 released = 0; | 1853 | u32 released = 0; | 
| 1851 | int type; | 1854 | int type; | 
| 1852 | 1855 | ||
| 1853 | b_ptr = (struct bearer *)tb_ptr; | ||
| 1854 | TIPC_SKB_CB(buf)->handle = b_ptr; | ||
| 1855 | |||
| 1856 | head = head->next; | 1856 | head = head->next; | 
| 1857 | 1857 | ||
| 1858 | /* Ensure message is well-formed */ | 1858 | /* Ensure message is well-formed */ | 
| @@ -1871,7 +1871,10 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr) | |||
| 1871 | msg = buf_msg(buf); | 1871 | msg = buf_msg(buf); | 
| 1872 | 1872 | ||
| 1873 | if (unlikely(msg_non_seq(msg))) { | 1873 | if (unlikely(msg_non_seq(msg))) { | 
| 1874 | link_recv_non_seq(buf); | 1874 | if (msg_user(msg) == LINK_CONFIG) | 
| 1875 | tipc_disc_recv_msg(buf, b_ptr); | ||
| 1876 | else | ||
| 1877 | tipc_bclink_recv_pkt(buf); | ||
| 1875 | continue; | 1878 | continue; | 
| 1876 | } | 1879 | } | 
| 1877 | 1880 | ||
| @@ -1978,8 +1981,6 @@ deliver: | |||
| 1978 | if (link_recv_changeover_msg(&l_ptr, &buf)) { | 1981 | if (link_recv_changeover_msg(&l_ptr, &buf)) { | 
| 1979 | msg = buf_msg(buf); | 1982 | msg = buf_msg(buf); | 
| 1980 | seq_no = msg_seqno(msg); | 1983 | seq_no = msg_seqno(msg); | 
| 1981 | TIPC_SKB_CB(buf)->handle | ||
| 1982 | = b_ptr; | ||
| 1983 | if (type == ORIGINAL_MSG) | 1984 | if (type == ORIGINAL_MSG) | 
| 1984 | goto deliver; | 1985 | goto deliver; | 
| 1985 | goto protocol_check; | 1986 | goto protocol_check; | 
| @@ -2263,7 +2264,8 @@ static void link_recv_proto_msg(struct link *l_ptr, struct sk_buff *buf) | |||
| 2263 | switch (msg_type(msg)) { | 2264 | switch (msg_type(msg)) { | 
| 2264 | 2265 | ||
| 2265 | case RESET_MSG: | 2266 | case RESET_MSG: | 
| 2266 | if (!link_working_unknown(l_ptr) && l_ptr->peer_session) { | 2267 | if (!link_working_unknown(l_ptr) && | 
| 2268 | (l_ptr->peer_session != INVALID_SESSION)) { | ||
| 2267 | if (msg_session(msg) == l_ptr->peer_session) { | 2269 | if (msg_session(msg) == l_ptr->peer_session) { | 
| 2268 | dbg("Duplicate RESET: %u<->%u\n", | 2270 | dbg("Duplicate RESET: %u<->%u\n", | 
| 2269 | msg_session(msg), l_ptr->peer_session); | 2271 | msg_session(msg), l_ptr->peer_session); | 
| @@ -2424,7 +2426,7 @@ void tipc_link_changeover(struct link *l_ptr) | |||
| 2424 | } | 2426 | } | 
| 2425 | 2427 | ||
| 2426 | msg_init(&tunnel_hdr, CHANGEOVER_PROTOCOL, | 2428 | msg_init(&tunnel_hdr, CHANGEOVER_PROTOCOL, | 
| 2427 | ORIGINAL_MSG, TIPC_OK, INT_H_SIZE, l_ptr->addr); | 2429 | ORIGINAL_MSG, INT_H_SIZE, l_ptr->addr); | 
| 2428 | msg_set_bearer_id(&tunnel_hdr, l_ptr->peer_bearer_id); | 2430 | msg_set_bearer_id(&tunnel_hdr, l_ptr->peer_bearer_id); | 
| 2429 | msg_set_msgcnt(&tunnel_hdr, msgcount); | 2431 | msg_set_msgcnt(&tunnel_hdr, msgcount); | 
| 2430 | dbg("Link changeover requires %u tunnel messages\n", msgcount); | 2432 | dbg("Link changeover requires %u tunnel messages\n", msgcount); | 
| @@ -2479,7 +2481,7 @@ void tipc_link_send_duplicate(struct link *l_ptr, struct link *tunnel) | |||
| 2479 | struct tipc_msg tunnel_hdr; | 2481 | struct tipc_msg tunnel_hdr; | 
| 2480 | 2482 | ||
| 2481 | msg_init(&tunnel_hdr, CHANGEOVER_PROTOCOL, | 2483 | msg_init(&tunnel_hdr, CHANGEOVER_PROTOCOL, | 
| 2482 | DUPLICATE_MSG, TIPC_OK, INT_H_SIZE, l_ptr->addr); | 2484 | DUPLICATE_MSG, INT_H_SIZE, l_ptr->addr); | 
| 2483 | msg_set_msgcnt(&tunnel_hdr, l_ptr->out_queue_size); | 2485 | msg_set_msgcnt(&tunnel_hdr, l_ptr->out_queue_size); | 
| 2484 | msg_set_bearer_id(&tunnel_hdr, l_ptr->peer_bearer_id); | 2486 | msg_set_bearer_id(&tunnel_hdr, l_ptr->peer_bearer_id); | 
| 2485 | iter = l_ptr->first_out; | 2487 | iter = l_ptr->first_out; | 
| @@ -2672,10 +2674,12 @@ int tipc_link_send_long_buf(struct link *l_ptr, struct sk_buff *buf) | |||
| 2672 | u32 pack_sz = link_max_pkt(l_ptr); | 2674 | u32 pack_sz = link_max_pkt(l_ptr); | 
| 2673 | u32 fragm_sz = pack_sz - INT_H_SIZE; | 2675 | u32 fragm_sz = pack_sz - INT_H_SIZE; | 
| 2674 | u32 fragm_no = 1; | 2676 | u32 fragm_no = 1; | 
| 2675 | u32 destaddr = msg_destnode(inmsg); | 2677 | u32 destaddr; | 
| 2676 | 2678 | ||
| 2677 | if (msg_short(inmsg)) | 2679 | if (msg_short(inmsg)) | 
| 2678 | destaddr = l_ptr->addr; | 2680 | destaddr = l_ptr->addr; | 
| 2681 | else | ||
| 2682 | destaddr = msg_destnode(inmsg); | ||
| 2679 | 2683 | ||
| 2680 | if (msg_routed(inmsg)) | 2684 | if (msg_routed(inmsg)) | 
| 2681 | msg_set_prevnode(inmsg, tipc_own_addr); | 2685 | msg_set_prevnode(inmsg, tipc_own_addr); | 
| @@ -2683,7 +2687,7 @@ int tipc_link_send_long_buf(struct link *l_ptr, struct sk_buff *buf) | |||
| 2683 | /* Prepare reusable fragment header: */ | 2687 | /* Prepare reusable fragment header: */ | 
| 2684 | 2688 | ||
| 2685 | msg_init(&fragm_hdr, MSG_FRAGMENTER, FIRST_FRAGMENT, | 2689 | msg_init(&fragm_hdr, MSG_FRAGMENTER, FIRST_FRAGMENT, | 
| 2686 | TIPC_OK, INT_H_SIZE, destaddr); | 2690 | INT_H_SIZE, destaddr); | 
| 2687 | msg_set_link_selector(&fragm_hdr, msg_link_selector(inmsg)); | 2691 | msg_set_link_selector(&fragm_hdr, msg_link_selector(inmsg)); | 
| 2688 | msg_set_long_msgno(&fragm_hdr, mod(l_ptr->long_msg_seq_no++)); | 2692 | msg_set_long_msgno(&fragm_hdr, mod(l_ptr->long_msg_seq_no++)); | 
| 2689 | msg_set_fragm_no(&fragm_hdr, fragm_no); | 2693 | msg_set_fragm_no(&fragm_hdr, fragm_no); | 
| @@ -2994,7 +2998,7 @@ struct sk_buff *tipc_link_cmd_config(const void *req_tlv_area, int req_tlv_space | |||
| 2994 | link_set_supervision_props(l_ptr, new_value); | 2998 | link_set_supervision_props(l_ptr, new_value); | 
| 2995 | tipc_link_send_proto_msg(l_ptr, STATE_MSG, | 2999 | tipc_link_send_proto_msg(l_ptr, STATE_MSG, | 
| 2996 | 0, 0, new_value, 0, 0); | 3000 | 0, 0, new_value, 0, 0); | 
| 2997 | res = TIPC_OK; | 3001 | res = 0; | 
| 2998 | } | 3002 | } | 
| 2999 | break; | 3003 | break; | 
| 3000 | case TIPC_CMD_SET_LINK_PRI: | 3004 | case TIPC_CMD_SET_LINK_PRI: | 
| @@ -3003,14 +3007,14 @@ struct sk_buff *tipc_link_cmd_config(const void *req_tlv_area, int req_tlv_space | |||
| 3003 | l_ptr->priority = new_value; | 3007 | l_ptr->priority = new_value; | 
| 3004 | tipc_link_send_proto_msg(l_ptr, STATE_MSG, | 3008 | tipc_link_send_proto_msg(l_ptr, STATE_MSG, | 
| 3005 | 0, 0, 0, new_value, 0); | 3009 | 0, 0, 0, new_value, 0); | 
| 3006 | res = TIPC_OK; | 3010 | res = 0; | 
| 3007 | } | 3011 | } | 
| 3008 | break; | 3012 | break; | 
| 3009 | case TIPC_CMD_SET_LINK_WINDOW: | 3013 | case TIPC_CMD_SET_LINK_WINDOW: | 
| 3010 | if ((new_value >= TIPC_MIN_LINK_WIN) && | 3014 | if ((new_value >= TIPC_MIN_LINK_WIN) && | 
| 3011 | (new_value <= TIPC_MAX_LINK_WIN)) { | 3015 | (new_value <= TIPC_MAX_LINK_WIN)) { | 
| 3012 | tipc_link_set_queue_limits(l_ptr, new_value); | 3016 | tipc_link_set_queue_limits(l_ptr, new_value); | 
| 3013 | res = TIPC_OK; | 3017 | res = 0; | 
| 3014 | } | 3018 | } | 
| 3015 | break; | 3019 | break; | 
| 3016 | } | 3020 | } | 
| @@ -3226,7 +3230,7 @@ int link_control(const char *name, u32 op, u32 val) | |||
| 3226 | if (op == TIPC_CMD_UNBLOCK_LINK) { | 3230 | if (op == TIPC_CMD_UNBLOCK_LINK) { | 
| 3227 | l_ptr->blocked = 0; | 3231 | l_ptr->blocked = 0; | 
| 3228 | } | 3232 | } | 
| 3229 | res = TIPC_OK; | 3233 | res = 0; | 
| 3230 | } | 3234 | } | 
| 3231 | tipc_node_unlock(node); | 3235 | tipc_node_unlock(node); | 
| 3232 | } | 3236 | } | 
