kref: add kref_set()
This adds kref_set() to the kref api for future use by people who really know what they are doing with krefs... From: Evgeniy Polyakov <johnpol@2ka.mipt.ru> Cc: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Родитель
775b64d2b6
Коммит
41ca28ab2a
|
@ -24,6 +24,7 @@ struct kref {
|
||||||
atomic_t refcount;
|
atomic_t refcount;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void kref_set(struct kref *kref, int num);
|
||||||
void kref_init(struct kref *kref);
|
void kref_init(struct kref *kref);
|
||||||
void kref_get(struct kref *kref);
|
void kref_get(struct kref *kref);
|
||||||
int kref_put(struct kref *kref, void (*release) (struct kref *kref));
|
int kref_put(struct kref *kref, void (*release) (struct kref *kref));
|
||||||
|
|
15
lib/kref.c
15
lib/kref.c
|
@ -14,14 +14,24 @@
|
||||||
#include <linux/kref.h>
|
#include <linux/kref.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* kref_set - initialize object and set refcount to requested number.
|
||||||
|
* @kref: object in question.
|
||||||
|
* @num: initial reference counter
|
||||||
|
*/
|
||||||
|
void kref_set(struct kref *kref, int num)
|
||||||
|
{
|
||||||
|
atomic_set(&kref->refcount, num);
|
||||||
|
smp_mb();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* kref_init - initialize object.
|
* kref_init - initialize object.
|
||||||
* @kref: object in question.
|
* @kref: object in question.
|
||||||
*/
|
*/
|
||||||
void kref_init(struct kref *kref)
|
void kref_init(struct kref *kref)
|
||||||
{
|
{
|
||||||
atomic_set(&kref->refcount,1);
|
kref_set(kref, 1);
|
||||||
smp_mb();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -61,6 +71,7 @@ int kref_put(struct kref *kref, void (*release)(struct kref *kref))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(kref_set);
|
||||||
EXPORT_SYMBOL(kref_init);
|
EXPORT_SYMBOL(kref_init);
|
||||||
EXPORT_SYMBOL(kref_get);
|
EXPORT_SYMBOL(kref_get);
|
||||||
EXPORT_SYMBOL(kref_put);
|
EXPORT_SYMBOL(kref_put);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче