if (!p)
                        break; /* No more bearers to try */
 
-               if (tipc_bearer_blocked(p)) {
-                       if (!s || tipc_bearer_blocked(s))
-                               continue; /* Can't use either bearer */
-                       b = s;
-               }
-
                tipc_nmap_diff(&bcbearer->remains, &b->nodes,
                               &bcbearer->remains_new);
                if (bcbearer->remains_new.count == bcbearer->remains.count)
 
        tipc_disc_remove_dest(b_ptr->link_req);
 }
 
-/*
- * Interrupt enabling new requests after bearer blocking:
- * See bearer_send().
- */
-void tipc_continue(struct tipc_bearer *b)
-{
-       spin_lock_bh(&b->lock);
-       b->blocked = 0;
-       spin_unlock_bh(&b->lock);
-}
-
-/*
- * tipc_bearer_blocked - determines if bearer is currently blocked
- */
-int tipc_bearer_blocked(struct tipc_bearer *b)
-{
-       int res;
-
-       spin_lock_bh(&b->lock);
-       res = b->blocked;
-       spin_unlock_bh(&b->lock);
-
-       return res;
-}
-
 /**
  * tipc_enable_bearer - enable bearer with the given name
  */
 }
 
 /**
- * tipc_block_bearer - Block the bearer, and reset all its links
+ * tipc_reset_bearer - Reset all links established over this bearer
  */
-int tipc_block_bearer(struct tipc_bearer *b_ptr)
+int tipc_reset_bearer(struct tipc_bearer *b_ptr)
 {
        struct tipc_link *l_ptr;
        struct tipc_link *temp_l_ptr;
 
        read_lock_bh(&tipc_net_lock);
-       pr_info("Blocking bearer <%s>\n", b_ptr->name);
+       pr_info("Resetting bearer <%s>\n", b_ptr->name);
        spin_lock_bh(&b_ptr->lock);
-       b_ptr->blocked = 1;
        list_for_each_entry_safe(l_ptr, temp_l_ptr, &b_ptr->links, link_list) {
                struct tipc_node *n_ptr = l_ptr->owner;
 
 
        pr_info("Disabling bearer <%s>\n", b_ptr->name);
        spin_lock_bh(&b_ptr->lock);
-       b_ptr->blocked = 1;
        b_ptr->media->disable_media(b_ptr);
        list_for_each_entry_safe(l_ptr, temp_l_ptr, &b_ptr->links, link_list) {
                tipc_link_delete(l_ptr);
 
  * struct tipc_bearer - TIPC bearer structure
  * @usr_handle: pointer to additional media-specific information about bearer
  * @mtu: max packet size bearer can support
- * @blocked: non-zero if bearer is blocked
  * @lock: spinlock for controlling access to bearer
  * @addr: media-specific address associated with bearer
  * @name: bearer name (format = media:interface)
 struct tipc_bearer {
        void *usr_handle;                       /* initalized by media */
        u32 mtu;                                /* initalized by media */
-       int blocked;                            /* initalized by media */
        struct tipc_media_addr addr;            /* initalized by media */
        char name[TIPC_MAX_BEARER_NAME];
        spinlock_t lock;
 
 void tipc_recv_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr);
 
-int  tipc_block_bearer(struct tipc_bearer *b_ptr);
-void tipc_continue(struct tipc_bearer *tb_ptr);
+int  tipc_reset_bearer(struct tipc_bearer *b_ptr);
 
 int tipc_enable_bearer(const char *bearer_name, u32 disc_domain, u32 priority);
 int tipc_disable_bearer(const char *name);
 struct tipc_bearer *tipc_bearer_find(const char *name);
 struct tipc_bearer *tipc_bearer_find_interface(const char *if_name);
 struct tipc_media *tipc_media_find(const char *name);
-int tipc_bearer_blocked(struct tipc_bearer *b_ptr);
 void tipc_bearer_stop(void);
 
 /**
 
        /* Accept discovery message & send response, if necessary */
        link_fully_up = link_working_working(link);
 
-       if ((type == DSC_REQ_MSG) && !link_fully_up && !b_ptr->blocked) {
+       if ((type == DSC_REQ_MSG) && !link_fully_up) {
                rbuf = tipc_disc_init_msg(DSC_RESP_MSG, orig, b_ptr);
                if (rbuf) {
                        tipc_bearer_send(b_ptr, rbuf, &media_addr);
        disc_update(req);
 }
 
-/**
- * disc_send_msg - send link setup request message
- * @req: ptr to link request structure
- */
-static void disc_send_msg(struct tipc_link_req *req)
-{
-       if (!req->bearer->blocked)
-               tipc_bearer_send(req->bearer, req->buf, &req->dest);
-}
-
 /**
  * disc_timeout - send a periodic link setup request
  * @req: ptr to link request structure
         * hold at fast polling rate if don't have any associated nodes,
         * otherwise hold at slow polling rate
         */
-       disc_send_msg(req);
+       tipc_bearer_send(req->bearer, req->buf, &req->dest);
+
 
        req->timer_intv *= 2;
        if (req->num_nodes)
        k_init_timer(&req->timer, (Handler)disc_timeout, (unsigned long)req);
        k_start_timer(&req->timer, req->timer_intv);
        b_ptr->link_req = req;
-       disc_send_msg(req);
+       tipc_bearer_send(req->bearer, req->buf, &req->dest);
        return 0;
 }
 
 
        tb_ptr->bcast_addr.media_id = TIPC_MEDIA_TYPE_ETH;
        tb_ptr->bcast_addr.broadcast = 1;
        tb_ptr->mtu = dev->mtu;
-       tb_ptr->blocked = 0;
        eth_media_addr_set(tb_ptr, &tb_ptr->addr, (char *)dev->dev_addr);
        return 0;
 }
        switch (evt) {
        case NETDEV_CHANGE:
                if (netif_carrier_ok(dev))
-                       tipc_continue(eb_ptr->bearer);
-               else
-                       tipc_block_bearer(eb_ptr->bearer);
-               break;
-       case NETDEV_UP:
-               tipc_continue(eb_ptr->bearer);
-               break;
+                       break;
        case NETDEV_DOWN:
-               tipc_block_bearer(eb_ptr->bearer);
-               break;
        case NETDEV_CHANGEMTU:
        case NETDEV_CHANGEADDR:
-               tipc_block_bearer(eb_ptr->bearer);
-               tipc_continue(eb_ptr->bearer);
+               tipc_reset_bearer(eb_ptr->bearer);
                break;
        case NETDEV_UNREGISTER:
        case NETDEV_CHANGENAME:
 
        tb_ptr->bcast_addr.media_id = TIPC_MEDIA_TYPE_IB;
        tb_ptr->bcast_addr.broadcast = 1;
        tb_ptr->mtu = dev->mtu;
-       tb_ptr->blocked = 0;
        ib_media_addr_set(tb_ptr, &tb_ptr->addr, (char *)dev->dev_addr);
        return 0;
 }
        switch (evt) {
        case NETDEV_CHANGE:
                if (netif_carrier_ok(dev))
-                       tipc_continue(ib_ptr->bearer);
-               else
-                       tipc_block_bearer(ib_ptr->bearer);
-               break;
-       case NETDEV_UP:
-               tipc_continue(ib_ptr->bearer);
-               break;
+                       break;
        case NETDEV_DOWN:
-               tipc_block_bearer(ib_ptr->bearer);
-               break;
        case NETDEV_CHANGEMTU:
        case NETDEV_CHANGEADDR:
-               tipc_block_bearer(ib_ptr->bearer);
-               tipc_continue(ib_ptr->bearer);
+               tipc_reset_bearer(ib_ptr->bearer);
                break;
        case NETDEV_UNREGISTER:
        case NETDEV_CHANGENAME:
 
                return link_send_long_buf(l_ptr, buf);
 
        /* Packet can be queued or sent. */
-       if (likely(!tipc_bearer_blocked(l_ptr->b_ptr) &&
-                  !link_congested(l_ptr))) {
+       if (likely(!link_congested(l_ptr))) {
                link_add_to_outqueue(l_ptr, buf, msg);
 
                tipc_bearer_send(l_ptr->b_ptr, buf, &l_ptr->media_addr);
 
        if (likely(!link_congested(l_ptr))) {
                if (likely(msg_size(msg) <= l_ptr->max_pkt)) {
-                       if (likely(!tipc_bearer_blocked(l_ptr->b_ptr))) {
-                               link_add_to_outqueue(l_ptr, buf, msg);
-                               tipc_bearer_send(l_ptr->b_ptr, buf,
-                                                &l_ptr->media_addr);
-                               l_ptr->unacked_window = 0;
-                               return res;
-                       }
-               } else
+                       link_add_to_outqueue(l_ptr, buf, msg);
+                       tipc_bearer_send(l_ptr->b_ptr, buf,
+                                        &l_ptr->media_addr);
+                       l_ptr->unacked_window = 0;
+                       return res;
+               }
+               else
                        *used_max_pkt = l_ptr->max_pkt;
        }
        return tipc_link_send_buf(l_ptr, buf);  /* All other cases */
                        }
 
                        /* Exit if link (or bearer) is congested */
-                       if (link_congested(l_ptr) ||
-                           tipc_bearer_blocked(l_ptr->b_ptr)) {
+                       if (link_congested(l_ptr)) {
                                res = link_schedule_port(l_ptr,
                                                         sender->ref, res);
                                goto exit;
 {
        u32 res;
 
-       if (tipc_bearer_blocked(l_ptr->b_ptr))
-               return;
-
        do {
                res = tipc_link_push_packet(l_ptr);
        } while (!res);
 
        msg = buf_msg(buf);
 
-       if (tipc_bearer_blocked(l_ptr->b_ptr)) {
-               if (l_ptr->retransm_queue_size == 0) {
-                       l_ptr->retransm_queue_head = msg_seqno(msg);
-                       l_ptr->retransm_queue_size = retransmits;
-               } else {
-                       pr_err("Unexpected retransmit on link %s (qsize=%d)\n",
-                              l_ptr->name, l_ptr->retransm_queue_size);
+       /* Detect repeated retransmit failures */
+       if (l_ptr->last_retransmitted == msg_seqno(msg)) {
+               if (++l_ptr->stale_count > 100) {
+                       link_retransmit_failure(l_ptr, buf);
+                       return;
                }
-               return;
        } else {
-               /* Detect repeated retransmit failures on unblocked bearer */
-               if (l_ptr->last_retransmitted == msg_seqno(msg)) {
-                       if (++l_ptr->stale_count > 100) {
-                               link_retransmit_failure(l_ptr, buf);
-                               return;
-                       }
-               } else {
-                       l_ptr->last_retransmitted = msg_seqno(msg);
-                       l_ptr->stale_count = 1;
-               }
+               l_ptr->last_retransmitted = msg_seqno(msg);
+               l_ptr->stale_count = 1;
        }
 
        while (retransmits && (buf != l_ptr->next_out) && buf) {
        skb_copy_to_linear_data(buf, msg, sizeof(l_ptr->proto_msg));
        buf->priority = TC_PRIO_CONTROL;
 
-       /* Defer message if bearer is already blocked */
-       if (tipc_bearer_blocked(l_ptr->b_ptr)) {
-               l_ptr->proto_msg_queue = buf;
-               return;
-       }
-
        tipc_bearer_send(l_ptr->b_ptr, buf, &l_ptr->media_addr);
        l_ptr->unacked_window = 0;
        kfree_skb(buf);