On Tue, Feb 20, 2018 at 02:08:26PM +0100, Christian König wrote: > Am 20.02.2018 um 13:35 schrieb Peter Zijlstra: > > > +static inline bool ww_mutex_is_owned_by(struct ww_mutex *lock, > > > + struct task_struct *task, > > > + struct ww_acquire_ctx *ctx) > > > +{ > > > + return likely(__mutex_owner(&lock->base) == task) && > > > + READ_ONCE(lock->ctx) == ctx; > > > +} > > Nak on that interface, that's racy and broken by design. > > Why? If task != current you can race with a concurrent mutex_unlock().