summaryrefslogtreecommitdiff
path: root/Documentation/kref.txt
diff options
context:
space:
mode:
authorDaniel Walker <dwalker@mvista.com>2008-02-06 01:37:58 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-06 10:41:09 -0800
commit1373bed34e30b8632aaf43aa85d72329c83f7077 (patch)
treeb8874ac03a70d53394ca63f0f6e79d807b82d006 /Documentation/kref.txt
parent13f14b4d8be225cbb11ff2be7c048590a9ccf87b (diff)
downloadlwn-1373bed34e30b8632aaf43aa85d72329c83f7077.tar.gz
lwn-1373bed34e30b8632aaf43aa85d72329c83f7077.zip
docs: convert kref semaphore to mutex
Just converting this documentation semaphore reference, since we don't want to promote semaphore usage. Signed-off-by: Daniel Walker <dwalker@mvista.com> Acked-by: Corey Minyard <minyard@acm.org> Cc: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'Documentation/kref.txt')
-rw-r--r--Documentation/kref.txt20
1 files changed, 10 insertions, 10 deletions
diff --git a/Documentation/kref.txt b/Documentation/kref.txt
index f38b59d00c63..130b6e87aa7e 100644
--- a/Documentation/kref.txt
+++ b/Documentation/kref.txt
@@ -141,10 +141,10 @@ The last rule (rule 3) is the nastiest one to handle. Say, for
instance, you have a list of items that are each kref-ed, and you wish
to get the first one. You can't just pull the first item off the list
and kref_get() it. That violates rule 3 because you are not already
-holding a valid pointer. You must add locks or semaphores. For
-instance:
+holding a valid pointer. You must add a mutex (or some other lock).
+For instance:
-static DECLARE_MUTEX(sem);
+static DEFINE_MUTEX(mutex);
static LIST_HEAD(q);
struct my_data
{
@@ -155,12 +155,12 @@ struct my_data
static struct my_data *get_entry()
{
struct my_data *entry = NULL;
- down(&sem);
+ mutex_lock(&mutex);
if (!list_empty(&q)) {
entry = container_of(q.next, struct my_q_entry, link);
kref_get(&entry->refcount);
}
- up(&sem);
+ mutex_unlock(&mutex);
return entry;
}
@@ -174,9 +174,9 @@ static void release_entry(struct kref *ref)
static void put_entry(struct my_data *entry)
{
- down(&sem);
+ mutex_lock(&mutex);
kref_put(&entry->refcount, release_entry);
- up(&sem);
+ mutex_unlock(&mutex);
}
The kref_put() return value is useful if you do not want to hold the
@@ -191,13 +191,13 @@ static void release_entry(struct kref *ref)
static void put_entry(struct my_data *entry)
{
- down(&sem);
+ mutex_lock(&mutex);
if (kref_put(&entry->refcount, release_entry)) {
list_del(&entry->link);
- up(&sem);
+ mutex_unlock(&mutex);
kfree(entry);
} else
- up(&sem);
+ mutex_unlock(&mutex);
}
This is really more useful if you have to call other routines as part