Patch "gfs2: Don't call dlm after protocol is unmounted" has been added to the 4.19-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    gfs2: Don't call dlm after protocol is unmounted

to the 4.19-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     gfs2-don-t-call-dlm-after-protocol-is-unmounted.patch
and it can be found in the queue-4.19 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 56f89ad64e260b5d075f1adbb972cf038c81d043
Author: Bob Peterson <rpeterso@xxxxxxxxxx>
Date:   Fri Jul 30 12:41:49 2021 -0500

    gfs2: Don't call dlm after protocol is unmounted
    
    [ 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@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/gfs2/lock_dlm.c b/fs/gfs2/lock_dlm.c
index 56dddc1f8ddd..9e90e42c495e 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) &&



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux