• B
    fs: add freeze_super/thaw_super fs hooks · 48b6bca6
    Benjamin Marzinski 提交于
    Currently, freezing a filesystem involves calling freeze_super, which locks
    sb->s_umount and then calls the fs-specific freeze_fs hook. This makes it
    hard for gfs2 (and potentially other cluster filesystems) to use the vfs
    freezing code to do freezes on all the cluster nodes.
    
    In order to communicate that a freeze has been requested, and to make sure
    that only one node is trying to freeze at a time, gfs2 uses a glock
    (sd_freeze_gl). The problem is that there is no hook for gfs2 to acquire
    this lock before calling freeze_super. This means that two nodes can
    attempt to freeze the filesystem by both calling freeze_super, acquiring
    the sb->s_umount lock, and then attempting to grab the cluster glock
    sd_freeze_gl. Only one will succeed, and the other will be stuck in
    freeze_super, making it impossible to finish freezing the node.
    
    To solve this problem, this patch adds the freeze_super and thaw_super
    hooks.  If a filesystem implements these hooks, they are called instead of
    the vfs freeze_super and thaw_super functions. This means that every
    filesystem that implements these hooks must call the vfs freeze_super and
    thaw_super functions itself within the hook function to make use of the vfs
    freezing code.
    Reviewed-by: NJan Kara <jack@suse.cz>
    Signed-off-by: NBenjamin Marzinski <bmarzins@redhat.com>
    Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
    48b6bca6
block_dev.c 44.2 KB