• Andreas Gruenbacher's avatar
    gfs2: Fix another freeze/thaw hang · 52954b75
    Andreas Gruenbacher authored
    On a thawed filesystem, the freeze glock is held in shared mode.  In
    order to initiate a cluster-wide freeze, the node initiating the freeze
    drops the freeze glock and grabs it in exclusive mode.  The other nodes
    recognize this as contention on the freeze glock; function
    freeze_go_callback is invoked.  This indicates to them that they must
    freeze the filesystem locally, drop the freeze glock, and then
    re-acquire it in shared mode before being able to unfreeze the
    filesystem locally.
    
    While a node is trying to re-acquire the freeze glock in shared mode,
    additional contention can occur.  In that case, the node must behave in
    the same way as above.
    
    Unfortunately, freeze_go_callback() contains a check that causes it to
    bail out when the freeze glock isn't held in shared mode.  Fix that to
    allow the glock to be unlocked or held in shared mode.
    
    In addition, update a reference to trylock_super() which has been
    renamed to super_trylock_shared() in the meantime.
    
    Fixes: b77b4a48 ("gfs2: Rework freeze / thaw logic")
    Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
    52954b75
glops.c 20.6 KB