On Tue 25-01-22 18:18:15, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > If we fail to synchronize the filesystem while preparing to freeze the > fs, abort the freeze. > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > --- > fs/super.c | 19 ++++++++++++------- > 1 file changed, 12 insertions(+), 7 deletions(-) Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > > > diff --git a/fs/super.c b/fs/super.c > index 7af820ba5ad5..f1d4a193602d 100644 > --- a/fs/super.c > +++ b/fs/super.c > @@ -1616,11 +1616,9 @@ static void lockdep_sb_freeze_acquire(struct super_block *sb) > percpu_rwsem_acquire(sb->s_writers.rw_sem + level, 0, _THIS_IP_); > } > > -static void sb_freeze_unlock(struct super_block *sb) > +static void sb_freeze_unlock(struct super_block *sb, int level) > { > - int level; > - > - for (level = SB_FREEZE_LEVELS - 1; level >= 0; level--) > + for (level--; level >= 0; level--) > percpu_up_write(sb->s_writers.rw_sem + level); > } > > @@ -1691,7 +1689,14 @@ int freeze_super(struct super_block *sb) > sb_wait_write(sb, SB_FREEZE_PAGEFAULT); > > /* All writers are done so after syncing there won't be dirty data */ > - sync_filesystem(sb); > + ret = sync_filesystem(sb); > + if (ret) { > + sb->s_writers.frozen = SB_UNFROZEN; > + sb_freeze_unlock(sb, SB_FREEZE_PAGEFAULT); > + wake_up(&sb->s_writers.wait_unfrozen); > + deactivate_locked_super(sb); > + return ret; > + } > > /* Now wait for internal filesystem counter */ > sb->s_writers.frozen = SB_FREEZE_FS; > @@ -1703,7 +1708,7 @@ int freeze_super(struct super_block *sb) > printk(KERN_ERR > "VFS:Filesystem freeze failed\n"); > sb->s_writers.frozen = SB_UNFROZEN; > - sb_freeze_unlock(sb); > + sb_freeze_unlock(sb, SB_FREEZE_FS); > wake_up(&sb->s_writers.wait_unfrozen); > deactivate_locked_super(sb); > return ret; > @@ -1748,7 +1753,7 @@ static int thaw_super_locked(struct super_block *sb) > } > > sb->s_writers.frozen = SB_UNFROZEN; > - sb_freeze_unlock(sb); > + sb_freeze_unlock(sb, SB_FREEZE_FS); > out: > wake_up(&sb->s_writers.wait_unfrozen); > deactivate_locked_super(sb); > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR