Commit ae245557f87fffe2e1c39ba07524024e650e822b

Authored by Parthasarathy Bhuvaragan
Committed by David S. Miller
1 parent f3ad288c56

tipc: donot create timers if subscription timeout = TIPC_WAIT_FOREVER

Until now, we create timers even for the subscription requests
with timeout = TIPC_WAIT_FOREVER.
This can be improved by avoiding timer creation when the timeout
is set to TIPC_WAIT_FOREVER.

In this commit, we introduce a check to creates timers only
when timeout != TIPC_WAIT_FOREVER.

Acked-by: Ying Xue <ying.xue@windriver.com>
Reviewed-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: Parthasarathy Bhuvaragan <parthasarathy.bhuvaragan@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 1 changed file with 11 additions and 3 deletions Side-by-side Diff

... ... @@ -188,12 +188,14 @@
188 188 static void tipc_subscrb_delete(struct tipc_subscriber *subscriber)
189 189 {
190 190 struct tipc_subscription *sub, *temp;
  191 + u32 timeout;
191 192  
192 193 spin_lock_bh(&subscriber->lock);
193 194 /* Destroy any existing subscriptions for subscriber */
194 195 list_for_each_entry_safe(sub, temp, &subscriber->subscrp_list,
195 196 subscrp_list) {
196   - if (del_timer(&sub->timer)) {
  197 + timeout = htohl(sub->evt.s.timeout, sub->swap);
  198 + if ((timeout == TIPC_WAIT_FOREVER) || del_timer(&sub->timer)) {
197 199 tipc_subscrp_delete(sub);
198 200 tipc_subscrb_put(subscriber);
199 201 }
200 202  
... ... @@ -217,13 +219,16 @@
217 219 struct tipc_subscriber *subscriber)
218 220 {
219 221 struct tipc_subscription *sub, *temp;
  222 + u32 timeout;
220 223  
221 224 spin_lock_bh(&subscriber->lock);
222 225 /* Find first matching subscription, exit if not found */
223 226 list_for_each_entry_safe(sub, temp, &subscriber->subscrp_list,
224 227 subscrp_list) {
225 228 if (!memcmp(s, &sub->evt.s, sizeof(struct tipc_subscr))) {
226   - if (del_timer(&sub->timer)) {
  229 + timeout = htohl(sub->evt.s.timeout, sub->swap);
  230 + if ((timeout == TIPC_WAIT_FOREVER) ||
  231 + del_timer(&sub->timer)) {
227 232 tipc_subscrp_delete(sub);
228 233 tipc_subscrb_put(subscriber);
229 234 }
... ... @@ -267,7 +272,6 @@
267 272 sub->swap = swap;
268 273 memcpy(&sub->evt.s, s, sizeof(*s));
269 274 atomic_inc(&tn->subscription_count);
270   - setup_timer(&sub->timer, tipc_subscrp_timeout, (unsigned long)sub);
271 275 return sub;
272 276 }
273 277  
... ... @@ -290,6 +294,10 @@
290 294 spin_unlock_bh(&subscriber->lock);
291 295  
292 296 timeout = htohl(sub->evt.s.timeout, swap);
  297 + if (timeout == TIPC_WAIT_FOREVER)
  298 + return;
  299 +
  300 + setup_timer(&sub->timer, tipc_subscrp_timeout, (unsigned long)sub);
293 301 mod_timer(&sub->timer, jiffies + msecs_to_jiffies(timeout));
294 302 }
295 303