Re: [PATCH v5 2/2] pipe: use __pipe_{lock,unlock} instead of spinlock

From: Matthew Wilcox
Date: Sat Aug 19 2023 - 00:13:47 EST


On Sat, Aug 19, 2023 at 11:28:58AM +0800, Hongchen Zhang wrote:
> Hi David,
>
> On 2023/8/14 pm 4:47, David Howells wrote:
> > Hongchen Zhang <zhanghongchen@xxxxxxxxxxx> wrote:
> >
> > > - spin_lock_irq(&pipe->rd_wait.lock);
> > > + __pipe_lock(pipe);
> >
> I changed the code and the post_one_notification is not called inside spin
> lock ,please check this patch again.

In remove_watch_from_object(), you moved post_one_notification() before
lock_queue(), but it's still called inside a RCU read-side critical
section, which cannot sleep.

Please test with CONFIG_DEBUG_ATOMIC_SLEEP before you send a new version.
You should probably turn on DEBUG_SPINLOCK, LOCKDEP, DEBUG_MUTEXES
and a few other debug options.