|
@@ -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,
|
|
@@ -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;
|
|
|
}
|
|
|
|