void tipc_named_node_up(unsigned long node)
 {
+       struct tipc_node *n_ptr;
+       struct link *l_ptr;
        struct publication *publ;
        struct distr_item *item = NULL;
        struct sk_buff *buf = NULL;
        u32 left = 0;
        u32 rest;
-       u32 max_item_buf;
+       u32 max_item_buf = 0;
+
+       /* compute maximum amount of publication data to send per message */
+
+       read_lock_bh(&tipc_net_lock);
+       n_ptr = tipc_node_find((u32)node);
+       if (n_ptr) {
+               tipc_node_lock(n_ptr);
+               l_ptr = n_ptr->active_links[0];
+               if (l_ptr)
+                       max_item_buf = ((l_ptr->max_pkt - INT_H_SIZE) /
+                               ITEM_SIZE) * ITEM_SIZE;
+               tipc_node_unlock(n_ptr);
+       }
+       read_unlock_bh(&tipc_net_lock);
+       if (!max_item_buf)
+               return;
 
        read_lock_bh(&tipc_nametbl_lock);
-       max_item_buf = TIPC_MAX_USER_MSG_SIZE / ITEM_SIZE;
-       max_item_buf *= ITEM_SIZE;
        rest = publ_cnt * ITEM_SIZE;
 
        list_for_each_entry(publ, &publ_root, local_list) {