On Fri, Aug 15, 2014 at 1:53 PM, Nick Krause <xerofoify@xxxxxxxxx> 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 _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies