aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/subscr.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2015-02-27 18:18:52 -0500
committerDavid S. Miller <davem@davemloft.net>2015-02-27 18:18:52 -0500
commit721a57a02dfc81b6d63b93b8ca23be3004b61515 (patch)
tree6d5b3bdd02fd7586b54de631f806e76efcdbfb50 /net/tipc/subscr.c
parent247f6d0f8667fda408fbe0e503ab54a957be2ce5 (diff)
parentd76a436d50d1ebce352e1815eaea79a254b2b24f (diff)
Merge branch 'tipc-next'
Erik Hugne says: ==================== tipc: bug fix and some improvements Most important is a fix for a nullptr exception that would occur when name table subscriptions fail. The remaining patches are performance improvements and cosmetic changes. v2: remove unnecessary whitespace in patch #2 ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/subscr.c')
-rw-r--r--net/tipc/subscr.c23
1 files changed, 4 insertions, 19 deletions
diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
index 72c339e432aa..1c147c869c2e 100644
--- a/net/tipc/subscr.c
+++ b/net/tipc/subscr.c
@@ -162,19 +162,6 @@ static void subscr_del(struct tipc_subscription *sub)
162 atomic_dec(&tn->subscription_count); 162 atomic_dec(&tn->subscription_count);
163} 163}
164 164
165/**
166 * subscr_terminate - terminate communication with a subscriber
167 *
168 * Note: Must call it in process context since it might sleep.
169 */
170static void subscr_terminate(struct tipc_subscription *sub)
171{
172 struct tipc_subscriber *subscriber = sub->subscriber;
173 struct tipc_net *tn = net_generic(sub->net, tipc_net_id);
174
175 tipc_conn_terminate(tn->topsrv, subscriber->conid);
176}
177
178static void subscr_release(struct tipc_subscriber *subscriber) 165static void subscr_release(struct tipc_subscriber *subscriber)
179{ 166{
180 struct tipc_subscription *sub; 167 struct tipc_subscription *sub;
@@ -312,16 +299,14 @@ static void subscr_conn_msg_event(struct net *net, int conid,
312{ 299{
313 struct tipc_subscriber *subscriber = usr_data; 300 struct tipc_subscriber *subscriber = usr_data;
314 struct tipc_subscription *sub = NULL; 301 struct tipc_subscription *sub = NULL;
302 struct tipc_net *tn = net_generic(net, tipc_net_id);
315 303
316 spin_lock_bh(&subscriber->lock); 304 spin_lock_bh(&subscriber->lock);
317 if (subscr_subscribe(net, (struct tipc_subscr *)buf, subscriber, 305 subscr_subscribe(net, (struct tipc_subscr *)buf, subscriber, &sub);
318 &sub) < 0) {
319 spin_unlock_bh(&subscriber->lock);
320 subscr_terminate(sub);
321 return;
322 }
323 if (sub) 306 if (sub)
324 tipc_nametbl_subscribe(sub); 307 tipc_nametbl_subscribe(sub);
308 else
309 tipc_conn_terminate(tn->topsrv, subscriber->conid);
325 spin_unlock_bh(&subscriber->lock); 310 spin_unlock_bh(&subscriber->lock);
326} 311}
327 312