documentation: Make sample code and documentation consistent
In the chapter 'analogy with reader-writer locking', the sample code uses spinlock_t in reader-writer case. Just correct it so that we can read the document easily. Signed-off-by: Yao Dongdong <yaodongdong@huawei.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
274529ba9b
commit
70946a44de
|
@ -681,22 +681,30 @@ Although RCU can be used in many different ways, a very common use of
|
||||||
RCU is analogous to reader-writer locking. The following unified
|
RCU is analogous to reader-writer locking. The following unified
|
||||||
diff shows how closely related RCU and reader-writer locking can be.
|
diff shows how closely related RCU and reader-writer locking can be.
|
||||||
|
|
||||||
|
@@ -5,5 +5,5 @@ struct el {
|
||||||
|
int data;
|
||||||
|
/* Other data fields */
|
||||||
|
};
|
||||||
|
-rwlock_t listmutex;
|
||||||
|
+spinlock_t listmutex;
|
||||||
|
struct el head;
|
||||||
|
|
||||||
@@ -13,15 +14,15 @@
|
@@ -13,15 +14,15 @@
|
||||||
struct list_head *lp;
|
struct list_head *lp;
|
||||||
struct el *p;
|
struct el *p;
|
||||||
|
|
||||||
- read_lock();
|
- read_lock(&listmutex);
|
||||||
- list_for_each_entry(p, head, lp) {
|
- list_for_each_entry(p, head, lp) {
|
||||||
+ rcu_read_lock();
|
+ rcu_read_lock();
|
||||||
+ list_for_each_entry_rcu(p, head, lp) {
|
+ list_for_each_entry_rcu(p, head, lp) {
|
||||||
if (p->key == key) {
|
if (p->key == key) {
|
||||||
*result = p->data;
|
*result = p->data;
|
||||||
- read_unlock();
|
- read_unlock(&listmutex);
|
||||||
+ rcu_read_unlock();
|
+ rcu_read_unlock();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
- read_unlock();
|
- read_unlock(&listmutex);
|
||||||
+ rcu_read_unlock();
|
+ rcu_read_unlock();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -732,7 +740,7 @@ Or, for those who prefer a side-by-side listing:
|
||||||
5 int data; 5 int data;
|
5 int data; 5 int data;
|
||||||
6 /* Other data fields */ 6 /* Other data fields */
|
6 /* Other data fields */ 6 /* Other data fields */
|
||||||
7 }; 7 };
|
7 }; 7 };
|
||||||
8 spinlock_t listmutex; 8 spinlock_t listmutex;
|
8 rwlock_t listmutex; 8 spinlock_t listmutex;
|
||||||
9 struct el head; 9 struct el head;
|
9 struct el head; 9 struct el head;
|
||||||
|
|
||||||
1 int search(long key, int *result) 1 int search(long key, int *result)
|
1 int search(long key, int *result) 1 int search(long key, int *result)
|
||||||
|
@ -740,15 +748,15 @@ Or, for those who prefer a side-by-side listing:
|
||||||
3 struct list_head *lp; 3 struct list_head *lp;
|
3 struct list_head *lp; 3 struct list_head *lp;
|
||||||
4 struct el *p; 4 struct el *p;
|
4 struct el *p; 4 struct el *p;
|
||||||
5 5
|
5 5
|
||||||
6 read_lock(); 6 rcu_read_lock();
|
6 read_lock(&listmutex); 6 rcu_read_lock();
|
||||||
7 list_for_each_entry(p, head, lp) { 7 list_for_each_entry_rcu(p, head, lp) {
|
7 list_for_each_entry(p, head, lp) { 7 list_for_each_entry_rcu(p, head, lp) {
|
||||||
8 if (p->key == key) { 8 if (p->key == key) {
|
8 if (p->key == key) { 8 if (p->key == key) {
|
||||||
9 *result = p->data; 9 *result = p->data;
|
9 *result = p->data; 9 *result = p->data;
|
||||||
10 read_unlock(); 10 rcu_read_unlock();
|
10 read_unlock(&listmutex); 10 rcu_read_unlock();
|
||||||
11 return 1; 11 return 1;
|
11 return 1; 11 return 1;
|
||||||
12 } 12 }
|
12 } 12 }
|
||||||
13 } 13 }
|
13 } 13 }
|
||||||
14 read_unlock(); 14 rcu_read_unlock();
|
14 read_unlock(&listmutex); 14 rcu_read_unlock();
|
||||||
15 return 0; 15 return 0;
|
15 return 0; 15 return 0;
|
||||||
16 } 16 }
|
16 } 16 }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue