diff options
-rw-r--r-- | kernel/rcupdate.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c index 436ab35f6fa7..523e46483b99 100644 --- a/kernel/rcupdate.c +++ b/kernel/rcupdate.c | |||
@@ -241,12 +241,16 @@ static void rcu_do_batch(struct rcu_data *rdp) | |||
241 | next = rdp->donelist = list->next; | 241 | next = rdp->donelist = list->next; |
242 | list->func(list); | 242 | list->func(list); |
243 | list = next; | 243 | list = next; |
244 | rdp->qlen--; | ||
245 | if (++count >= rdp->blimit) | 244 | if (++count >= rdp->blimit) |
246 | break; | 245 | break; |
247 | } | 246 | } |
247 | |||
248 | local_irq_disable(); | ||
249 | rdp->qlen -= count; | ||
250 | local_irq_enable(); | ||
248 | if (rdp->blimit == INT_MAX && rdp->qlen <= qlowmark) | 251 | if (rdp->blimit == INT_MAX && rdp->qlen <= qlowmark) |
249 | rdp->blimit = blimit; | 252 | rdp->blimit = blimit; |
253 | |||
250 | if (!rdp->donelist) | 254 | if (!rdp->donelist) |
251 | rdp->donetail = &rdp->donelist; | 255 | rdp->donetail = &rdp->donelist; |
252 | else | 256 | else |