• Abhi Das's avatar
    gfs2: fix race between gfs2_freeze_func and unmount · e983250f
    Abhi Das authored
    [ Upstream commit 8f918219 ]
    
    As part of the freeze operation, gfs2_freeze_func() is left blocking
    on a request to hold the sd_freeze_gl in SH. This glock is held in EX
    by the gfs2_freeze() code.
    
    A subsequent call to gfs2_unfreeze() releases the EXclusively held
    sd_freeze_gl, which allows gfs2_freeze_func() to acquire it in SH and
    resume its operation.
    
    gfs2_unfreeze(), however, doesn't wait for gfs2_freeze_func() to complete.
    If a umount is issued right after unfreeze, it could result in an
    inconsistent filesystem because some journal data (statfs update) isn't
    written out.
    
    Refer to commit 24972557 for a more detailed explanation of how
    freeze/unfreeze work.
    
    This patch causes gfs2_unfreeze() to wait for gfs2_freeze_func() to
    complete before returning to the user.
    Signed-off-by: default avatarAbhi Das <adas@redhat.com>
    Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    e983250f
incore.h 23.4 KB