Skip to content

Commit 28a0ee3

Browse files
oleg-nesterovPeter Zijlstra
authored andcommitted
documentation: seqlock: fix the wrong documentation of read_seqbegin_or_lock/need_seqretry
The comments and pseudo code in Documentation/locking/seqlock.rst are wrong: int seq = 0; do { read_seqbegin_or_lock(&foo_seqlock, &seq); /* ... [[read-side critical section]] ... */ } while (need_seqretry(&foo_seqlock, seq)); read_seqbegin_or_lock() always returns with an even "seq" and need_seqretry() doesn't change this counter. This means that seq is always even and thus the locking pass is simply impossible. IOW, "_or_lock" has no effect and this code doesn't differ from do { seq = read_seqbegin(&foo_seqlock); /* ... [[read-side critical section]] ... */ } while (read_seqretry(&foo_seqlock, seq)); Signed-off-by: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
1 parent 44472d1 commit 28a0ee3

1 file changed

Lines changed: 5 additions & 4 deletions

File tree

Documentation/locking/seqlock.rst

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,13 +220,14 @@ Read path, three categories:
220220
according to a passed marker. This is used to avoid lockless readers
221221
starvation (too much retry loops) in case of a sharp spike in write
222222
activity. First, a lockless read is tried (even marker passed). If
223-
that trial fails (odd sequence counter is returned, which is used as
224-
the next iteration marker), the lockless read is transformed to a
225-
full locking read and no retry loop is necessary::
223+
that trial fails (sequence counter doesn't match), make the marker
224+
odd for the next iteration, the lockless read is transformed to a
225+
full locking read and no retry loop is necessary, for example::
226226

227227
/* marker; even initialization */
228-
int seq = 0;
228+
int seq = 1;
229229
do {
230+
seq++; /* 2 on the 1st/lockless path, otherwise odd */
230231
read_seqbegin_or_lock(&foo_seqlock, &seq);
231232
232233
/* ... [[read-side critical section]] ... */

0 commit comments

Comments
 (0)