• Benjamin Marzinski's avatar
    GFS2: don't overrun reserved revokes · 1bc333f4
    Benjamin Marzinski authored
    When run during fsync, a gfs2_log_flush could happen between the
    time when gfs2_ail_flush checked the number of blocks to revoke,
    and when it actually started the transaction to do those revokes.
    This occassionally caused it to need more revokes than it reserved,
    causing gfs2 to crash.
    
    Instead of just reserving enough revokes to handle the blocks that
    currently need them, this patch makes gfs2_ail_flush reserve the
    maximum number of revokes it can, without increasing the total number
    of reserved log blocks. This patch also passes the number of reserved
    revokes to __gfs2_ail_flush() so that it doesn't go over its limit
    and cause a crash like we're seeing. Non-fsync calls to __gfs2_ail_flush
    will still cause a BUG() necessary revokes are skipped.
    Signed-off-by: default avatarBenjamin Marzinski <bmarzins@redhat.com>
    Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
    1bc333f4
glops.c 15.3 KB