• Darrick J. Wong's avatar
    fs: distinguish between user initiated freeze and kernel initiated freeze · 880b9577
    Darrick J. Wong authored
    Userspace can freeze a filesystem using the FIFREEZE ioctl or by
    suspending the block device; this state persists until userspace thaws
    the filesystem with the FITHAW ioctl or resuming the block device.
    Since commit 18e9e510 ("Introduce freeze_super and thaw_super for
    the fsfreeze ioctl") we only allow the first freeze command to succeed.
    
    The kernel may decide that it is necessary to freeze a filesystem for
    its own internal purposes, such as suspends in progress, filesystem fsck
    activities, or quiescing a device prior to removal.  Userspace thaw
    commands must never break a kernel freeze, and kernel thaw commands
    shouldn't undo userspace's freeze command.
    
    Introduce a couple of freeze holder flags and wire it into the
    sb_writers state.  One kernel and one userspace freeze are allowed to
    coexist at the same time; the filesystem will not thaw until both are
    lifted.
    
    I wonder if the f2fs/gfs2 code should be using a kernel freeze here, but
    for now we'll use FREEZE_HOLDER_USERSPACE to preserve existing
    behaviors.
    
    Cc: mcgrof@kernel.org
    Cc: jack@suse.cz
    Cc: hch@infradead.org
    Cc: ruansy.fnst@fujitsu.com
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    880b9577
vfs.rst 60.4 KB