📄 ext3-external-journal-2.6.9.patch
字号:
Signed-off-by: Johann Lombardi <johann.lombardi@bull.net>Index: linux-2.6.9-full/fs/ext3/super.c===================================================================--- linux-2.6.9-full.orig/fs/ext3/super.c 2006-05-20 01:14:14.000000000 +0400+++ linux-2.6.9-full/fs/ext3/super.c 2006-05-20 01:17:10.000000000 +0400@@ -39,7 +39,8 @@ #include "xattr.h" #include "acl.h" -static int ext3_load_journal(struct super_block *, struct ext3_super_block *);+static int ext3_load_journal(struct super_block *, struct ext3_super_block *,+ unsigned long journal_devnum); static int ext3_create_journal(struct super_block *, struct ext3_super_block *, int); static void ext3_commit_super (struct super_block * sb,@@ -591,7 +592,7 @@ enum { Opt_nouid32, Opt_check, Opt_nocheck, Opt_debug, Opt_oldalloc, Opt_orlov, Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl, Opt_reservation, Opt_noreservation, Opt_noload,- Opt_commit, Opt_journal_update, Opt_journal_inum,+ Opt_commit, Opt_journal_update, Opt_journal_inum, Opt_journal_dev, 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,@@ -630,6 +631,7 @@ static match_table_t tokens = { {Opt_commit, "commit=%u"}, {Opt_journal_update, "journal=update"}, {Opt_journal_inum, "journal=%u"},+ {Opt_journal_dev, "journal_dev=%u"}, {Opt_abort, "abort"}, {Opt_data_journal, "data=journal"}, {Opt_data_ordered, "data=ordered"},@@ -675,8 +677,9 @@ static unsigned long get_sb_block(void * return sb_block; } -static int parse_options (char * options, struct super_block *sb,- unsigned long * inum, unsigned long *n_blocks_count, int is_remount)+static int parse_options (char *options, struct super_block *sb,+ unsigned long *inum, unsigned long *journal_devnum, + unsigned long *n_blocks_count, int is_remount) { struct ext3_sb_info *sbi = EXT3_SB(sb); char * p;@@ -816,6 +819,16 @@ static int parse_options (char * options return 0; *inum = option; break;+ case Opt_journal_dev:+ if (is_remount) {+ printk(KERN_ERR "EXT3-fs: cannot specify "+ "journal on remount\n");+ return 0;+ }+ if (match_int(&args[0], &option))+ return 0;+ *journal_devnum = option;+ break; case Opt_noload: set_opt (sbi->s_mount_opt, NOLOAD); break;@@ -1278,6 +1291,7 @@ static int ext3_fill_super (struct super unsigned long logic_sb_block; unsigned long offset = 0; unsigned long journal_inum = 0;+ unsigned long journal_devnum = 0; unsigned long def_mount_opts; struct inode *root; int blocksize;@@ -1361,7 +1375,8 @@ static int ext3_fill_super (struct super set_opt(sbi->s_mount_opt, RESERVATION); - if (!parse_options ((char *) data, sb, &journal_inum, NULL, 0))+ if (!parse_options ((char *) data, sb, &journal_inum, &journal_devnum, + NULL, 0)) goto failed_mount; set_sb_time_gran(sb, 1000000000U);@@ -1567,7 +1582,7 @@ static int ext3_fill_super (struct super */ if (!test_opt(sb, NOLOAD) && EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {- if (ext3_load_journal(sb, es))+ if (ext3_load_journal(sb, es, journal_devnum)) goto failed_mount2; } else if (journal_inum) { if (ext3_create_journal(sb, es, journal_inum))@@ -1831,15 +1846,24 @@ out_bdev: return NULL; } -static int ext3_load_journal(struct super_block * sb,- struct ext3_super_block * es)+static int ext3_load_journal(struct super_block *sb,+ struct ext3_super_block *es,+ unsigned long journal_devnum) { journal_t *journal; int journal_inum = le32_to_cpu(es->s_journal_inum);- dev_t journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev));+ dev_t journal_dev; int err = 0; int really_read_only; + if (journal_devnum &&+ journal_devnum != le32_to_cpu(es->s_journal_dev)) {+ printk(KERN_INFO "EXT3-fs: external journal device major/minor "+ "numbers have changed\n");+ journal_dev = new_decode_dev(journal_devnum);+ } else+ journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev));+ really_read_only = bdev_read_only(sb->s_bdev); /*@@ -1898,6 +1922,16 @@ static int ext3_load_journal(struct supe EXT3_SB(sb)->s_journal = journal; ext3_clear_journal_err(sb, es);++ if (journal_devnum &&+ journal_devnum != le32_to_cpu(es->s_journal_dev)) {+ es->s_journal_dev = cpu_to_le32(journal_devnum);+ sb->s_dirt = 1;++ /* Make sure we flush the recovery flag to disk. */+ ext3_commit_super(sb, es, 1);+ }+ return 0; } @@ -2105,13 +2139,13 @@ int ext3_remount (struct super_block * s { struct ext3_super_block * es; struct ext3_sb_info *sbi = EXT3_SB(sb);- unsigned long tmp;+ unsigned long tmp1, tmp2; unsigned long n_blocks_count = 0; /* * Allow the "check" option to be passed as a remount option. */- if (!parse_options(data, sb, &tmp, &n_blocks_count, 1))+ if (!parse_options(data, sb, &tmp1, &tmp2, &n_blocks_count, 1)) return -EINVAL; if (sbi->s_mount_opt & EXT3_MOUNT_ABORT)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -