diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/percpu_counter.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/percpu_counter.c b/lib/percpu_counter.c index 3b0ed80c1ef..3a59d84b2d1 100644 --- a/lib/percpu_counter.c +++ b/lib/percpu_counter.c @@ -68,21 +68,27 @@ s64 __percpu_counter_sum(struct percpu_counter *fbc) } EXPORT_SYMBOL(__percpu_counter_sum); -void percpu_counter_init(struct percpu_counter *fbc, s64 amount) +int percpu_counter_init(struct percpu_counter *fbc, s64 amount) { spin_lock_init(&fbc->lock); fbc->count = amount; fbc->counters = alloc_percpu(s32); + if (!fbc->counters) + return -ENOMEM; #ifdef CONFIG_HOTPLUG_CPU mutex_lock(&percpu_counters_lock); list_add(&fbc->list, &percpu_counters); mutex_unlock(&percpu_counters_lock); #endif + return 0; } EXPORT_SYMBOL(percpu_counter_init); void percpu_counter_destroy(struct percpu_counter *fbc) { + if (!fbc->counters) + return; + free_percpu(fbc->counters); #ifdef CONFIG_HOTPLUG_CPU mutex_lock(&percpu_counters_lock); |