• Bob Peterson's avatar
    gfs2: Fix regression in freeze_go_sync · 20b32912
    Bob Peterson authored
    Patch 541656d3 ("gfs2: freeze should work on read-only mounts") changed
    the check for glock state in function freeze_go_sync() from "gl->gl_state
    == LM_ST_SHARED" to "gl->gl_req == LM_ST_EXCLUSIVE".  That's wrong and it
    regressed gfs2's freeze/thaw mechanism because it caused only the freezing
    node (which requests the glock in EX) to queue freeze work.
    
    All nodes go through this go_sync code path during the freeze to drop their
    SHared hold on the freeze glock, allowing the freezing node to acquire it
    in EXclusive mode. But all the nodes must freeze access to the file system
    locally, so they ALL must queue freeze work. The freeze_work calls
    freeze_func, which makes a request to reacquire the freeze glock in SH,
    effectively blocking until the thaw from the EX holder. Once thawed, the
    freezing node drops its EX hold on the freeze glock, then the (blocked)
    freeze_func reacquires the freeze glock in SH again (on all nodes, including
    the freezer) so all nodes go back to a thawed state.
    
    This patch changes the check back to gl_state == LM_ST_SHARED like it was
    prior to 541656d3.
    
    Fixes: 541656d3 ("gfs2: freeze should work on read-only mounts")
    Cc: stable@vger.kernel.org # v5.8+
    Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
    Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
    20b32912
glops.c 21.7 KB