[Bug 192863] New: Data race caused by double increment of pq->pq_cnt
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Wed Aug 20 18:42:03 UTC 2014
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=192863
Bug ID: 192863
Summary: Data race caused by double increment of pq->pq_cnt
Product: Base System
Version: 10.0-RELEASE
Hardware: Any
OS: Any
Status: Needs Triage
Severity: Affects Only Me
Priority: ---
Component: kern
Assignee: freebsd-bugs at FreeBSD.org
Reporter: pfonseca at mpi-sws.org
I've found that there are two accesses to "pq->pq_cnt" that are not
synchronized and that can race in FreeBSD 10.0. One of the accesses increments
the variable in function "vm_pagequeue_cnt_add()" while the other reads its
value in function "vm_pageout_scan()"
Strangely "pq->pq_cnt" is currently incremented twice in the function
"vm_pagequeue_cnt_add()" (in one instance this is done atomically, in the other
it's not).
Racing accesses:
/usr/src/sys/vm/vm_page.h:246
240 vm_pagequeue_cnt_add(struct vm_pagequeue *pq, int addend)
241 {
242
243 #ifdef notyet
244 vm_pagequeue_assert_locked(pq);
245 #endif
==> 246 pq->pq_cnt += addend;
247 atomic_add_int(pq->pq_vcnt, addend);
248 }
/usr/src/sys/vm/vm_pageout.c:962 (vm_pageout_scan)
961 pq = &vmd->vmd_pagequeues[PQ_INACTIVE];
==> 962 maxscan = pq->pq_cnt;
963 vm_pagequeue_lock(pq);
964 queues_locked = TRUE;
965 for (m = TAILQ_FIRST(&pq->pq_pl);
966 m != NULL && maxscan-- > 0 && page_shortage > 0;
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list