projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'for-2.6.33' of git://git.kernel.dk/linux-2.6-block
[deliverable/linux.git]
/
lib
/
kref.c
diff --git
a/lib/kref.c
b/lib/kref.c
index 0d07cc31c818108a5d9e3bc26444957108bad721..9ecd6e86561034f2a097bcc027765704e124f7df 100644
(file)
--- a/
lib/kref.c
+++ b/
lib/kref.c
@@
-14,13
+14,24
@@
#include <linux/kref.h>
#include <linux/module.h>
#include <linux/kref.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: object in question.
*/
void kref_init(struct kref *kref)
{
/**
* kref_init - initialize object.
* @kref: object in question.
*/
void kref_init(struct kref *kref)
{
-
atomic_set(&kref->refcount,
1);
+
kref_set(kref,
1);
}
/**
}
/**
@@
-31,6
+42,7
@@
void kref_get(struct kref *kref)
{
WARN_ON(!atomic_read(&kref->refcount));
atomic_inc(&kref->refcount);
{
WARN_ON(!atomic_read(&kref->refcount));
atomic_inc(&kref->refcount);
+ smp_mb__after_atomic_inc();
}
/**
}
/**
@@
-59,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_get);
EXPORT_SYMBOL(kref_put);
EXPORT_SYMBOL(kref_init);
EXPORT_SYMBOL(kref_get);
EXPORT_SYMBOL(kref_put);
This page took
0.023854 seconds
and
5
git commands to generate.