Re: [PATCH] fs: fix: second lock in function d_prune_aliases().

From: Matthew Wilcox
Date: Wed Dec 30 2020 - 16:37:58 EST


On Wed, Dec 30, 2020 at 08:04:49PM +0000, Al Viro wrote:
> On Wed, Dec 30, 2020 at 03:01:25PM +0800, YANG LI wrote:
> > Goto statement jumping will cause lock to be executed again without
> > executing unlock, placing the lock statement in front of goto
> > label to fix this problem.
> >
> > Signed-off-by: YANG LI <abaci-bugfix@xxxxxxxxxxxxxxxxx>
> > Reported-by: Abaci <abaci@xxxxxxxxxxxxxxxxx>
>
> I am sorry, but have you even attempted to trigger that codepath?
> Just to test your patch...
>
> FWIW, the patch is completely broken. Obviously so, since you
> have dput() done just before goto restart and dput() in very
> much capable of blocking. It should never be called with spinlocks
> held. And if you look at __dentry_kill() (well, dentry_unlink_inode()
> called by __dentry_kill()), you will see that it bloody well *DOES*
> drop inode->i_lock.

Not only that, but the function is even _annotated_ to that effect.
So this 'abaci' tool you have isn't even capable of the bare minimum.