git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge Btrfs into fs/btrfs
[pandora-kernel.git]
/
lib
/
kref.c
diff --git
a/lib/kref.c
b/lib/kref.c
index
0d07cc3
..
9ecd6e8
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);