]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
kref: remove WARN_ON for NULL release functions
authorAndi Kleen <ak@linux.intel.com>
Mon, 8 May 2017 22:58:50 +0000 (15:58 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 9 May 2017 00:15:14 +0000 (17:15 -0700)
The kref functions check for NULL release functions.  This WARN_ON seems
rather pointless.  We will eventually release and then just crash
nicely.  It is also somewhat expensive because these functions are
inlined in a lot of places.  Removing the WARN_ONs saves around 2.3k in
this kernel (likely more in others with more drivers)

     text    data     bss     dec     hex filename
  9083992 5367600 11116544        25568136        1862388 vmlinux-before-load-avg
  9070166 5367600 11116544        25554310        185ed86 vmlinux-load-avg

Link: http://lkml.kernel.org/r/20170315021431.13107-5-andi@firstfloor.org
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/kref.h

index f4156f88f5575dceb23a78807a12e5fde037c701..29220724bf1cb43df4cc6840f4016fe7ba30d54c 100644 (file)
@@ -66,8 +66,6 @@ static inline void kref_get(struct kref *kref)
  */
 static inline int kref_put(struct kref *kref, void (*release)(struct kref *kref))
 {
-       WARN_ON(release == NULL);
-
        if (refcount_dec_and_test(&kref->refcount)) {
                release(kref);
                return 1;
@@ -79,8 +77,6 @@ static inline int kref_put_mutex(struct kref *kref,
                                 void (*release)(struct kref *kref),
                                 struct mutex *lock)
 {
-       WARN_ON(release == NULL);
-
        if (refcount_dec_and_mutex_lock(&kref->refcount, lock)) {
                release(kref);
                return 1;
@@ -92,8 +88,6 @@ static inline int kref_put_lock(struct kref *kref,
                                void (*release)(struct kref *kref),
                                spinlock_t *lock)
 {
-       WARN_ON(release == NULL);
-
        if (refcount_dec_and_lock(&kref->refcount, lock)) {
                release(kref);
                return 1;