• Bob Peterson's avatar
    gfs2: fix withdraw sequence deadlock · ac915584
    Bob Peterson authored
    After a gfs2 file system withdraw, any attempt to read metadata is
    automatically rejected by function gfs2_meta_read() except for reads
    of the journal inode. This turns out to be a problem because function
    signal_our_withdraw() repeatedly calls check_journal_clean() which reads
    the metadata (both its dinode and indirect blocks) to see if the entire
    journal is mapped. The dinode read works, but reading the indirect blocks
    returns -EIO which gets sent back up and causes a consistency error.
    This results in withdraw-from-withdraw, which becomes a deadlock.
    
    This patch changes the test in gfs2_meta_read() to allow all metadata
    reads for the journal. Instead of checking the journal block, it now
    checks for the journal inode glock which is the same for all blocks in
    the journal. This allows check_journal_clean() to properly check the
    journal without trying to withdraw recursively.
    Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
    Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
    ac915584
meta_io.c 10.5 KB