lkml.org 
[lkml]   [2020]   [Jun]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 043/142] gfs2: Grab glock reference sooner in gfs2_add_revoke
    Date
    From: Andreas Gruenbacher <agruenba@redhat.com>

    [ Upstream commit f4e2f5e1a527ce58fc9f85145b03704779a3123e ]

    This patch rearranges gfs2_add_revoke so that the extra glock
    reference is added earlier on in the function to avoid races in which
    the glock is freed before the new reference is taken.

    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: Bob Peterson <rpeterso@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/gfs2/log.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
    index 47bc27d4169e..110e5c4db819 100644
    --- a/fs/gfs2/log.c
    +++ b/fs/gfs2/log.c
    @@ -598,13 +598,13 @@ void gfs2_add_revoke(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
    struct buffer_head *bh = bd->bd_bh;
    struct gfs2_glock *gl = bd->bd_gl;

    + sdp->sd_log_num_revoke++;
    + if (atomic_inc_return(&gl->gl_revokes) == 1)
    + gfs2_glock_hold(gl);
    bh->b_private = NULL;
    bd->bd_blkno = bh->b_blocknr;
    gfs2_remove_from_ail(bd); /* drops ref on bh */
    bd->bd_bh = NULL;
    - sdp->sd_log_num_revoke++;
    - if (atomic_inc_return(&gl->gl_revokes) == 1)
    - gfs2_glock_hold(gl);
    set_bit(GLF_LFLUSH, &gl->gl_flags);
    list_add(&bd->bd_list, &sdp->sd_log_revokes);
    }
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-01 20:08    [W:4.070 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site