On Thu 02-10-25 17:12:30, Byungchul Park wrote: > jbd2 journal handling code doesn't want jbd2_might_wait_for_commit() > to be placed between start_this_handle() and stop_this_handle(). So it > marks the region with rwsem_acquire_read() and rwsem_release(). > > However, the annotation is too strong for that purpose. We don't have > to use more than try lock annotation for that. > > rwsem_acquire_read() implies: > > 1. might be a waiter on contention of the lock. > 2. enter to the critical section of the lock. > > All we need in here is to act 2, not 1. So trylock version of > annotation is sufficient for that purpose. Now that dept partially > relies on lockdep annotaions, dept interpets rwsem_acquire_read() as a > potential wait and might report a deadlock by the wait. > > Replace it with trylock version of annotation. > > Signed-off-by: Byungchul Park <[email protected]>
Indeed. Feel free to add: Reviewed-by: Jan Kara <[email protected]> Honza > --- > fs/jbd2/transaction.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c > index c7867139af69..b4e65f51bf5e 100644 > --- a/fs/jbd2/transaction.c > +++ b/fs/jbd2/transaction.c > @@ -441,7 +441,7 @@ static int start_this_handle(journal_t *journal, handle_t > *handle, > read_unlock(&journal->j_state_lock); > current->journal_info = handle; > > - rwsem_acquire_read(&journal->j_trans_commit_map, 0, 0, _THIS_IP_); > + rwsem_acquire_read(&journal->j_trans_commit_map, 0, 1, _THIS_IP_); > jbd2_journal_free_transaction(new_transaction); > /* > * Ensure that no allocations done while the transaction is open are > -- > 2.17.1 > -- Jan Kara <[email protected]> SUSE Labs, CR
