spin_lock_bh(&subscriber->lock);
        tipc_nametbl_unsubscribe(sub);
+       list_del(&sub->subscrp_list);
        spin_unlock_bh(&subscriber->lock);
 
        /* Notify subscriber of timeout */
        struct tipc_net *tn = net_generic(sub->net, tipc_net_id);
        struct tipc_subscriber *subscriber = sub->subscriber;
 
-       spin_lock_bh(&subscriber->lock);
-       list_del(&sub->subscrp_list);
        atomic_dec(&tn->subscription_count);
-       spin_unlock_bh(&subscriber->lock);
        kfree(sub);
        tipc_subscrb_put(subscriber);
 }
                        continue;
 
                tipc_nametbl_unsubscribe(sub);
-               tipc_subscrp_get(sub);
-               spin_unlock_bh(&subscriber->lock);
+               list_del(&sub->subscrp_list);
                tipc_subscrp_delete(sub);
-               tipc_subscrp_put(sub);
-               spin_lock_bh(&subscriber->lock);
 
                if (s)
                        break;