struct list_head subscrp_list;
 };
 
-static void tipc_subscrp_delete(struct tipc_subscription *sub);
 static void tipc_subscrb_put(struct tipc_subscriber *subscriber);
 
 /**
 {
        struct list_head *subscription_list = &subscriber->subscrp_list;
        struct tipc_subscription *sub, *temp;
+       u32 timeout;
 
        spin_lock_bh(&subscriber->lock);
        list_for_each_entry_safe(sub, temp, subscription_list,  subscrp_list) {
                if (s && memcmp(s, &sub->evt.s, sizeof(struct tipc_subscr)))
                        continue;
 
-               tipc_nametbl_unsubscribe(sub);
-               list_del(&sub->subscrp_list);
-               tipc_subscrp_delete(sub);
+               timeout = htohl(sub->evt.s.timeout, sub->swap);
+               if (timeout == TIPC_WAIT_FOREVER || del_timer(&sub->timer)) {
+                       tipc_nametbl_unsubscribe(sub);
+                       list_del(&sub->subscrp_list);
+                       tipc_subscrp_put(sub);
+               }
 
                if (s)
                        break;
        tipc_subscrb_put(subscriber);
 }
 
-static void tipc_subscrp_delete(struct tipc_subscription *sub)
-{
-       u32 timeout = htohl(sub->evt.s.timeout, sub->swap);
-
-       if (timeout == TIPC_WAIT_FOREVER || del_timer(&sub->timer))
-               tipc_subscrp_put(sub);
-}
-
 static void tipc_subscrp_cancel(struct tipc_subscr *s,
                                struct tipc_subscriber *subscriber)
 {