Trace Help

Nick Krause xerofoify at gmail.com
Fri Aug 15 13:53:28 EDT 2014


I am just going to be blunt and assume that my trace is wrong.
I am tracing the bug , https://bugzilla.kernel.org/show_bug.cgi?id=72291.
Here are my trace steps
1.Start in _break_lease and find locks_insert_block and trace into that function
2. In that function we hit the internal function, _locks_insert_block and I
trace into that function
3. When I trace into that function , I get see we are using the same spinlocks
as the other functions and come to the conclusion we are not holding the
right spinlock and are looping indefinitely
4. This comment , /* Must be called with i_lock held. */ seems to a
value thing to check if we
are holding the i_lock spinlock
5.I trace back to where we are calling in the function, _break_lease
and we are calling like this,
locks_insert_block(flock, new_fl);
I known that flock is the lock that we are calling with and logically
needs the i_lock
6. flock = inode->i_flock; is clearly not the right lock and we are
already holding it in another
spinlock as part of this function , spin_lock(&inode->i_lock);
This means that we are looping forever trying to get the i_lock that
is already held by another spinlock,
causing us to loop forever when we call _break_lease.
Nick



More information about the Kernelnewbies mailing list