diff options
-rw-r--r-- | include/linux/kref.h | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/include/linux/kref.h b/include/linux/kref.h index d66c88a3b48c..abc0120b09b7 100644 --- a/include/linux/kref.h +++ b/include/linux/kref.h @@ -15,8 +15,8 @@ #ifndef _KREF_H_ #define _KREF_H_ -#include <linux/types.h> -#include <linux/slab.h> +#include <linux/bug.h> +#include <linux/atomic.h> struct kref { atomic_t refcount; @@ -48,7 +48,10 @@ static inline void kref_get(struct kref *kref) * @release: pointer to the function that will clean up the object when the * last reference to the object is released. * This pointer is required, and it is not acceptable to pass kfree - * in as this function. + * in as this function. If the caller does pass kfree to this + * function, you will be publicly mocked mercilessly by the kref + * maintainer, and anyone else who happens to notice it. You have + * been warned. * * Subtract @count from the refcount, and if 0, call release(). * Return 1 if the object was removed, otherwise return 0. Beware, if this @@ -60,7 +63,6 @@ static inline int kref_sub(struct kref *kref, unsigned int count, void (*release)(struct kref *kref)) { WARN_ON(release == NULL); - WARN_ON(release == (void (*)(struct kref *))kfree); if (atomic_sub_and_test((int) count, &kref->refcount)) { release(kref); @@ -75,7 +77,10 @@ static inline int kref_sub(struct kref *kref, unsigned int count, * @release: pointer to the function that will clean up the object when the * last reference to the object is released. * This pointer is required, and it is not acceptable to pass kfree - * in as this function. + * in as this function. If the caller does pass kfree to this + * function, you will be publicly mocked mercilessly by the kref + * maintainer, and anyone else who happens to notice it. You have + * been warned. * * Decrement the refcount, and if 0, call release(). * Return 1 if the object was removed, otherwise return 0. Beware, if this |