Message ID | 20180513160404.GA19620@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Sun 13-05-18 18:04:04, Oleg Nesterov wrote: > On 05/13, Amir Goldstein wrote: > > > > Since kernel v4.17-rc1 and DEBUG_RWSEMS, I see the > > warning below after filesystem freeze/thaw. > > > > This is a case where one process acquires a bunch of rwsem > > and another process releases them. > > > > To convey this use case to lockdep, freeze_super() calls > > lockdep_sb_freeze_release() on exit and thaw_super() > > calls lockdep_sb_freeze_acquire() on entry. > > This was already discussed, but I forgot the result... > > So once again, why we can't simply update percpu_rwsem_acquire() ? > Or we can check CONFIG_RWSEM_SPIN_ON_OWNER to match percpu_rwsem_release(), > but CONFIG_DEBUG_RWSEMS explains the purpose better. Yeah, what you suggests seems reasonable to me. So feel free to add: Acked-by: Jan Kara <jack@suse.cz> Honza > --- x/include/linux/percpu-rwsem.h > +++ x/include/linux/percpu-rwsem.h > @@ -141,6 +141,10 @@ static inline void percpu_rwsem_acquire( > bool read, unsigned long ip) > { > lock_acquire(&sem->rw_sem.dep_map, 0, 1, read, 1, NULL, ip); > +#ifdef CONFIG_DEBUG_RWSEMS > + if (!read) > + sem->rw_sem.owner = current; > +#endif > } > > #endif >
--- x/include/linux/percpu-rwsem.h +++ x/include/linux/percpu-rwsem.h @@ -141,6 +141,10 @@ static inline void percpu_rwsem_acquire( bool read, unsigned long ip) { lock_acquire(&sem->rw_sem.dep_map, 0, 1, read, 1, NULL, ip); +#ifdef CONFIG_DEBUG_RWSEMS + if (!read) + sem->rw_sem.owner = current; +#endif } #endif