[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAHc6FU5PHELD9N4tdfn663ao1RqyiByGLb8JOfEJGJdyNUwpQw@mail.gmail.com>
Date: Tue, 28 Apr 2020 11:56:00 +0200
From: Andreas Gruenbacher <agruenba@...hat.com>
To: Wu Bo <wubo40@...wei.com>
Cc: Bob Peterson <rpeterso@...hat.com>,
cluster-devel <cluster-devel@...hat.com>,
LKML <linux-kernel@...r.kernel.org>, liuzhiqiang26@...wei.com,
linfeilong@...wei.com
Subject: Re: [PATCH] fs/gfs2:lock a spinlock always before returning from do_xmote()
Hi,
On Tue, Apr 28, 2020 at 5:30 AM Wu Bo <wubo40@...wei.com> wrote:
> The call stack is as follows:
> finish_xmote()
> ...
> spin_lock(&gl->gl_lockref.lock);
> ...
> --> do_xmote()
> spin_unlock(&gl->gl_lockref.lock);
> ...
> return;
> ...
> spin_unlock(&gl->gl_lockref.lock);
>
> do_xmote function needs to be locked before returning,
> Otherwise, there will be a double release lock in finish_xmote() function.
>
> Signed-off-by: Wu Bo <wubo40@...wei.com>
> ---
> fs/gfs2/glock.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
> index 29f9b66..7129d10 100644
> --- a/fs/gfs2/glock.c
> +++ b/fs/gfs2/glock.c
> @@ -613,6 +613,7 @@ static void do_xmote(struct gfs2_glock *gl, struct gfs2_holder *gh, unsigned int
> fs_err(sdp, "Error %d syncing glock \n", ret);
> gfs2_dump_glock(NULL, gl, true);
> }
> + spin_lock(&gl->gl_lockref.lock);
> return;
> }
> }
> --
> 1.8.3.1
this patch looks correct. We've independently discovered this bug as
well in the meantime, and we'll send the fix upstream.
Thanks,
Andreas
Powered by blists - more mailing lists