Index: linux-2.6.18/fs/ext3/super.c =================================================================== --- linux-2.6.18.orig/fs/ext3/super.c +++ linux-2.6.18/fs/ext3/super.c @@ -688,6 +688,9 @@ enum { Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl, Opt_reservation, Opt_noreservation, Opt_noload, Opt_nobh, Opt_bh, Opt_commit, Opt_journal_update, Opt_journal_inum, Opt_journal_dev, +#ifdef JFS_FEATURE_COMPAT_CHECKSUM + Opt_journal_checksum, Opt_journal_async_commit, +#endif Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback, Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota, Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota, @@ -730,6 +733,10 @@ static match_table_t tokens = { {Opt_journal_update, "journal=update"}, {Opt_journal_inum, "journal=%u"}, {Opt_journal_dev, "journal_dev=%u"}, +#ifdef JFS_FEATURE_COMPAT_CHECKSUM + {Opt_journal_checksum, "journal_checksum"}, + {Opt_journal_async_commit, "journal_async_commit"}, +#endif {Opt_abort, "abort"}, {Opt_data_journal, "data=journal"}, {Opt_data_ordered, "data=ordered"}, @@ -924,6 +931,15 @@ static int parse_options (char *options, return 0; *journal_devnum = option; break; +#ifdef JFS_FEATURE_COMPAT_CHECKSUM + case Opt_journal_checksum: + set_opt (sbi->s_mount_opt, JOURNAL_CHECKSUM); + break; + case Opt_journal_async_commit: + set_opt (sbi->s_mount_opt, JOURNAL_ASYNC_COMMIT); + set_opt (sbi->s_mount_opt, JOURNAL_CHECKSUM); + break; +#endif case Opt_noload: set_opt (sbi->s_mount_opt, NOLOAD); break; @@ -2180,6 +2196,23 @@ static int ext3_fill_super (struct super goto failed_mount3; } +#ifdef JFS_FEATURE_COMPAT_CHECKSUM + if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { + journal_set_features(sbi->s_journal, + JFS_FEATURE_COMPAT_CHECKSUM, 0, + JFS_FEATURE_INCOMPAT_ASYNC_COMMIT); + } else if (test_opt(sb, JOURNAL_CHECKSUM)) { + journal_set_features(sbi->s_journal, + JFS_FEATURE_COMPAT_CHECKSUM, 0, 0); + journal_clear_features(sbi->s_journal, 0, 0, + JFS_FEATURE_INCOMPAT_ASYNC_COMMIT); + } else { + journal_clear_features(sbi->s_journal, + JFS_FEATURE_COMPAT_CHECKSUM, 0, + JFS_FEATURE_INCOMPAT_ASYNC_COMMIT); + } +#endif + /* We have now updated the journal if required, so we can * validate the data journaling mode. */ switch (test_opt(sb, DATA_FLAGS)) { Index: linux-2.6.18/include/linux/ext3_fs.h =================================================================== --- linux-2.6.18.orig/include/linux/ext3_fs.h +++ linux-2.6.18/include/linux/ext3_fs.h @@ -476,6 +476,11 @@ do { \ #define EXT3_MOUNT_EXTDEBUG 0x4000000/* Extents debug */ #define EXT3_MOUNT_MBALLOC 0x8000000/* Buddy allocation support */ +#ifdef JFS_FEATURE_COMPAT_CHECKSUM +#define EXT3_MOUNT_JOURNAL_CHECKSUM 0x10000000 /* Journal checksums */ +#define EXT3_MOUNT_JOURNAL_ASYNC_COMMIT 0x20000000 /* Journal Async Commit */ +#endif + /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */ #ifndef clear_opt #define clear_opt(o, opt) o &= ~EXT3_MOUNT_##opt