lkml.org 
[lkml]   [2021]   [Sep]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.14 41/59] gfs2: Don't call dlm after protocol is unmounted
    Date
    From: Bob Peterson <rpeterso@redhat.com>

    [ Upstream commit d1340f80f0b8066321b499a376780da00560e857 ]

    In the gfs2 withdraw sequence, the dlm protocol is unmounted with a call
    to lm_unmount. After a withdraw, users are allowed to unmount the
    withdrawn file system. But at that point we may still have glocks left
    over that we need to free via unmount's call to gfs2_gl_hash_clear.
    These glocks may have never been completed because of whatever problem
    caused the withdraw (IO errors or whatever).

    Before this patch, function gdlm_put_lock would still try to call into
    dlm to unlock these leftover glocks, which resulted in dlm returning
    -EINVAL because the lock space was abandoned. These glocks were never
    freed because there was no mechanism after that to free them.

    This patch adds a check to gdlm_put_lock to see if the locking protocol
    was inactive (DFL_UNMOUNT flag) and if so, free the glock and not
    make the invalid call into dlm.

    I could have combined this "if" with the one that follows, related to
    leftover glock LVBs, but I felt the code was more readable with its own
    if clause.

    Signed-off-by: Bob Peterson <rpeterso@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/gfs2/lock_dlm.c | 5 +++++
    1 file changed, 5 insertions(+)

    diff --git a/fs/gfs2/lock_dlm.c b/fs/gfs2/lock_dlm.c
    index de733a6c30bb..f3c16a504c8d 100644
    --- a/fs/gfs2/lock_dlm.c
    +++ b/fs/gfs2/lock_dlm.c
    @@ -295,6 +295,11 @@ static void gdlm_put_lock(struct gfs2_glock *gl)
    gfs2_sbstats_inc(gl, GFS2_LKS_DCOUNT);
    gfs2_update_request_times(gl);

    + /* don't want to call dlm if we've unmounted the lock protocol */
    + if (test_bit(DFL_UNMOUNT, &ls->ls_recover_flags)) {
    + gfs2_glock_free(gl);
    + return;
    + }
    /* don't want to skip dlm_unlock writing the lvb when lock has one */

    if (test_bit(SDF_SKIP_DLM_UNLOCK, &sdp->sd_flags) &&
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-09-09 15:17    [W:3.835 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site