Re: [btrfs/rt] lockdep false positive
From: Peter Zijlstra <peterz@infradead.org>
Date: 2017-01-23 09:08:09
Also in:
lkml
On Sun, Jan 22, 2017 at 06:45:14PM +0100, Mike Galbraith wrote:
On Sun, 2017-01-22 at 09:46 +0100, Mike Galbraith wrote:quoted
Greetings btrfs/lockdep wizards, RT trees have trouble with the BTRFS lockdep positive avoidance lock class dance (see disk-io.c). Seems the trouble is due to RT not having a means of telling lockdep that its rwlocks are recursive for read by the lock owner only, combined with the BTRFS lock class dance assuming that read_lock() is annotated rwlock_acquire_read(), which RT cannot do, as that would be a big fat lie. Creating a rt_read_lock_shared() for btrfs_clear_lock_blocking_rw() did indeed make lockdep happy as a clam for test purposes. (hm, submitting that would be excellent way to replenish frozen shark supply:) Ideas?
Not having looked at anything much, currently lockdep does not in fact model rwlock properly as is. Note that rwlock is _not_ in fact reader biased like it used to be, that is, read_lock() will block if there is a pending writer (just like rwsem), with the exception when read_lock() happend in_interrupt() (because tasklist_lock).