mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* Modeling wait events with Lockdep
@ 2022-06-30 23:05 Ioannis Angelakopoulos
  2022-07-01 11:59 ` Jan Kara
  0 siblings, 1 reply; 3+ messages in thread
From: Ioannis Angelakopoulos @ 2022-06-30 23:05 UTC (permalink / raw)
  To: mingo, jack; +Cc: boris, josef, linux-kernel

Hello,

I would like to ask some questions regarding modeling waiting for events 
(i.e the wait_event) in Linux using Lockdep.
I am trying to model these events in btrfs since there are deadlocks 
detected involving waiting for events and Lockdep is not currently able 
to address them (e.g., 
https://lore.kernel.org/linux-btrfs/cover.1655147296.git.josef@toxicpanda.com/).

I am very new to Lockdep so I would like to know, what would be the 
correct way of implementing these models using Lockdep?
I noticed that JBD2 uses a read-write lockdep map. It takes the read 
lockdep map when it creates a transaction handle and unlocks the read 
lockdep map when it frees the handle. Also, every time the thread has to 
wait for resources (e.g., transaction credits) and the handle is not 
supposed to be alive, the thread locks and unlocks immediately the write 
lockdep map before the waiting event (maybe I understood something wrong 
here?). Is this the only Lockdep model that can be used for these 
waiting events?

For your reference, here are 2 examples that we are trying to annotate 
with Lockdep and we would like to know if we are on the correct track.

In the first example it makes sense to use the JBD2 model, however we 
are not sure how to apply the model in the second case. The comments 
indicate our concerns.

------------------------------
Simple Case:

TA
rwsem_acquire_read(lockdep_map);
cond=false
do_work()
cond=true
rwsem_release_read(lockdep_map);
signal(w)

TB
rwsem_acquire(lockdep_map);
rswem_release(lockdep_map);
wait_event(w, cond==true)

Advanced Case:

TA
rwsem_acquire_read(lockdep_map)
cond=false
// exits while holding the lock

TB
cond=true
rwsem_release_read(lockdep_map) // We do not know that we hold the lock
signal(w)

TC
rwsem_acquire(lockdep_map);
rswem_release(lockdep_map);
wait_event(w, cond==true)

------------------------------

I am aware that DEPT (Dependency Tracker) which targets waiting for 
events in Linux is under development.
However, I need to implement these Lockdep models to aid the btrfs 
developers to catch existing deadlocks until DEPT is mature enough to be 
used.

Thanks,
Ioannis

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-07-06  0:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-30 23:05 Modeling wait events with Lockdep Ioannis Angelakopoulos
2022-07-01 11:59 ` Jan Kara
2022-07-06  0:51   ` Ioannis Angelakopoulos

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®