lkml.org 
[lkml]   [2020]   [Jul]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 054/244] gfs2: The freeze glock should never be frozen
    Date
    From: Bob Peterson <rpeterso@redhat.com>

    [ Upstream commit c860f8ffbea8924de05a281b937128773d30a77c ]

    Before this patch, some gfs2 code locked the freeze glock with LM_FLAG_NOEXP
    (Do not freeze) flag, and some did not. We never want to freeze the freeze
    glock, so this patch makes it consistently use LM_FLAG_NOEXP always.

    Signed-off-by: Bob Peterson <rpeterso@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/gfs2/ops_fstype.c | 3 ++-
    fs/gfs2/super.c | 16 +++++++++-------
    2 files changed, 11 insertions(+), 8 deletions(-)

    diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
    index a2c0554a18901..6d18d2c91add2 100644
    --- a/fs/gfs2/ops_fstype.c
    +++ b/fs/gfs2/ops_fstype.c
    @@ -1140,7 +1140,8 @@ static int gfs2_fill_super(struct super_block *sb, struct fs_context *fc)
    struct gfs2_holder freeze_gh;

    error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED,
    - GL_EXACT, &freeze_gh);
    + LM_FLAG_NOEXP | GL_EXACT,
    + &freeze_gh);
    if (error) {
    fs_err(sdp, "can't make FS RO: %d\n", error);
    goto fail_per_node;
    diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
    index 3bc76cf382fb9..160bb4598b48b 100644
    --- a/fs/gfs2/super.c
    +++ b/fs/gfs2/super.c
    @@ -167,7 +167,8 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
    if (error)
    return error;

    - error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED, GL_EXACT,
    + error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED,
    + LM_FLAG_NOEXP | GL_EXACT,
    &freeze_gh);
    if (error)
    goto fail_threads;
    @@ -429,7 +430,7 @@ static int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp)
    }

    error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_EXCLUSIVE,
    - 0, &sdp->sd_freeze_gh);
    + LM_FLAG_NOEXP, &sdp->sd_freeze_gh);
    if (error)
    goto out;

    @@ -612,14 +613,15 @@ int gfs2_make_fs_ro(struct gfs2_sbd *sdp)
    !gfs2_glock_is_locked_by_me(sdp->sd_freeze_gl)) {
    if (!log_write_allowed) {
    error = gfs2_glock_nq_init(sdp->sd_freeze_gl,
    - LM_ST_SHARED,
    - LM_FLAG_TRY | GL_EXACT,
    + LM_ST_SHARED, LM_FLAG_TRY |
    + LM_FLAG_NOEXP | GL_EXACT,
    &freeze_gh);
    if (error == GLR_TRYFAILED)
    error = 0;
    } else {
    error = gfs2_glock_nq_init(sdp->sd_freeze_gl,
    - LM_ST_SHARED, GL_EXACT,
    + LM_ST_SHARED,
    + LM_FLAG_NOEXP | GL_EXACT,
    &freeze_gh);
    if (error && !gfs2_withdrawn(sdp))
    return error;
    @@ -761,8 +763,8 @@ void gfs2_freeze_func(struct work_struct *work)
    struct super_block *sb = sdp->sd_vfs;

    atomic_inc(&sb->s_active);
    - error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED, GL_EXACT,
    - &freeze_gh);
    + error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED,
    + LM_FLAG_NOEXP | GL_EXACT, &freeze_gh);
    if (error) {
    fs_info(sdp, "GFS2: couldn't get freeze lock : %d\n", error);
    gfs2_assert_withdraw(sdp, 0);
    --
    2.25.1


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