* @dest: destination address for request messages
  * @domain: network domain to which links can be established
  * @num_nodes: number of nodes currently discovered (i.e. with an active link)
+ * @lock: spinlock for controlling access to requests
  * @buf: request message to be (repeatedly) sent
  * @timer: timer governing period between requests
  * @timer_intv: current interval between requests (in ms)
        struct tipc_media_addr dest;
        u32 domain;
        int num_nodes;
+       spinlock_t lock;
        struct sk_buff *buf;
        struct timer_list timer;
        unsigned int timer_intv;
  */
 void tipc_disc_add_dest(struct tipc_link_req *req)
 {
+       spin_lock_bh(&req->lock);
        req->num_nodes++;
+       spin_unlock_bh(&req->lock);
 }
 
 /**
  */
 void tipc_disc_remove_dest(struct tipc_link_req *req)
 {
+       spin_lock_bh(&req->lock);
        req->num_nodes--;
        disc_update(req);
+       spin_unlock_bh(&req->lock);
 }
 
 /**
 {
        int max_delay;
 
-       spin_lock_bh(&req->bearer->lock);
+       spin_lock_bh(&req->lock);
 
        /* Stop searching if only desired node has been found */
        if (tipc_node(req->domain) && req->num_nodes) {
 
        k_start_timer(&req->timer, req->timer_intv);
 exit:
-       spin_unlock_bh(&req->bearer->lock);
+       spin_unlock_bh(&req->lock);
 }
 
 /**
        req->domain = dest_domain;
        req->num_nodes = 0;
        req->timer_intv = TIPC_LINK_REQ_INIT;
+       spin_lock_init(&req->lock);
        k_init_timer(&req->timer, (Handler)disc_timeout, (unsigned long)req);
        k_start_timer(&req->timer, req->timer_intv);
        b_ptr->link_req = req;