Trace Help

Nick Krause xerofoify at gmail.com
Fri Aug 15 14:00:00 EDT 2014


On Fri, Aug 15, 2014 at 1:53 PM, Nick Krause <xerofoify at gmail.com> wrote:
> 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
Typo we internally call locks_insert_block



More information about the Kernelnewbies mailing list