diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/percpu-refcount.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/percpu-refcount.c b/lib/percpu-refcount.c index c69938e4b0d5..9ac959ef4cae 100644 --- a/lib/percpu-refcount.c +++ b/lib/percpu-refcount.c | |||
@@ -83,6 +83,7 @@ int percpu_ref_init(struct percpu_ref *ref, percpu_ref_func_t *release, | |||
83 | atomic_long_set(&ref->count, start_count); | 83 | atomic_long_set(&ref->count, start_count); |
84 | 84 | ||
85 | ref->release = release; | 85 | ref->release = release; |
86 | ref->confirm_switch = NULL; | ||
86 | return 0; | 87 | return 0; |
87 | } | 88 | } |
88 | EXPORT_SYMBOL_GPL(percpu_ref_init); | 89 | EXPORT_SYMBOL_GPL(percpu_ref_init); |
@@ -102,6 +103,8 @@ void percpu_ref_exit(struct percpu_ref *ref) | |||
102 | unsigned long __percpu *percpu_count = percpu_count_ptr(ref); | 103 | unsigned long __percpu *percpu_count = percpu_count_ptr(ref); |
103 | 104 | ||
104 | if (percpu_count) { | 105 | if (percpu_count) { |
106 | /* non-NULL confirm_switch indicates switching in progress */ | ||
107 | WARN_ON_ONCE(ref->confirm_switch); | ||
105 | free_percpu(percpu_count); | 108 | free_percpu(percpu_count); |
106 | ref->percpu_count_ptr = __PERCPU_REF_ATOMIC_DEAD; | 109 | ref->percpu_count_ptr = __PERCPU_REF_ATOMIC_DEAD; |
107 | } | 110 | } |