• Andreas Gruenbacher's avatar
    gfs2: Fix freeze consistency check in gfs2_trans_add_meta · 2cbd8064
    Andreas Gruenbacher authored
    Function gfs2_trans_add_meta() checks for the SDF_FROZEN flag to make
    sure that no buffers are added to a transaction while the filesystem is
    frozen.  With the recent freeze/thaw rework, the SDF_FROZEN flag is
    cleared after thaw_super() is called, which is sufficient for
    serializing freeze/thaw.
    
    However, other filesystem operations started after thaw_super() may now
    be calling gfs2_trans_add_meta() before the SDF_FROZEN flag is cleared,
    which will trigger the SDF_FROZEN check in gfs2_trans_add_meta().  Fix
    that by checking the s_writers.frozen state instead.
    
    In addition, make sure not to call gfs2_assert_withdraw() with the
    sd_log_lock spin lock held.  Check for a withdrawn filesystem before
    checking for a frozen filesystem, and don't pin/add buffers to the
    current transaction in case of a failure in either case.
    Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
    2cbd8064
trans.c 9.25 KB