Skip to content

Commit

Permalink
ext4: support freezing ext2 (nojournal) file systems
Browse files Browse the repository at this point in the history
Through an oversight, when we added nojournal support to ext4, we
didn't add support to allow file system freezing.  This is relatively
easy to add, so let's do it.

Signed-off-by: Theodore Ts'o <[email protected]>
Reported-by: Dexuan Cui <[email protected]>
  • Loading branch information
tytso committed Sep 18, 2014
1 parent bda3253 commit bb04457
Showing 1 changed file with 16 additions and 11 deletions.
27 changes: 16 additions & 11 deletions fs/ext4/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -1131,6 +1131,8 @@ static const struct super_operations ext4_nojournal_sops = {
.drop_inode = ext4_drop_inode,
.evict_inode = ext4_evict_inode,
.sync_fs = ext4_sync_fs,
.freeze_fs = ext4_freeze,
.unfreeze_fs = ext4_unfreeze,
.put_super = ext4_put_super,
.statfs = ext4_statfs,
.remount_fs = ext4_remount,
Expand Down Expand Up @@ -4758,23 +4760,26 @@ static int ext4_freeze(struct super_block *sb)

journal = EXT4_SB(sb)->s_journal;

/* Now we set up the journal barrier. */
jbd2_journal_lock_updates(journal);
if (journal) {
/* Now we set up the journal barrier. */
jbd2_journal_lock_updates(journal);

/*
* Don't clear the needs_recovery flag if we failed to flush
* the journal.
*/
error = jbd2_journal_flush(journal);
if (error < 0)
goto out;
/*
* Don't clear the needs_recovery flag if we failed to
* flush the journal.
*/
error = jbd2_journal_flush(journal);
if (error < 0)
goto out;
}

/* Journal blocked and flushed, clear needs_recovery flag. */
EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
error = ext4_commit_super(sb, 1);
out:
/* we rely on upper layer to stop further updates */
jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal);
if (journal)
/* we rely on upper layer to stop further updates */
jbd2_journal_unlock_updates(journal);
return error;
}

Expand Down

0 comments on commit bb04457

Please sign in to comment.