On Wed, Mar 01, 2017 at 02:17:07PM +0900, Byungchul Park wrote: > > > +void lock_commit_crosslock(struct lockdep_map *lock) > > > +{ > > > + struct cross_lock *xlock; > > > + unsigned long flags; > > > + > > > + if (!current->xhlocks) > > > + return; > > > + > > > + if (unlikely(current->lockdep_recursion)) > > > + return; > > > + > > > + raw_local_irq_save(flags); > > > + check_flags(flags); > > > + current->lockdep_recursion = 1; > > > + > > > + if (unlikely(!debug_locks)) > > > + return; > > > + > > > + if (!graph_lock()) > > > + return; > > > + > > > + xlock = &((struct lockdep_map_cross *)lock)->xlock; > > > + if (atomic_read(&xlock->ref) > 0 && !commit_xhlocks(xlock)) > > > > You terminate with graph_lock() held. > > Oops. What did I do? I'll fix it. I remembered it. It's no problem because it would terminate there, only if _both_ 'xlock->ref > 0' and 'commit_xhlocks returns 0' are true. Otherwise, it will unlock the lock safely. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>