1 diff -ur linux-stage.orig/fs/ext4/super.c linux-stage/fs/ext4/super.c
2 --- linux-stage.orig/fs/ext4/super.c 2013-09-26 11:25:51.970361560 -0400
3 +++ linux-stage/fs/ext4/super.c 2013-09-26 11:46:25.078236831 -0400
5 Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl,
6 Opt_auto_da_alloc, Opt_noauto_da_alloc, Opt_noload, Opt_nobh, Opt_bh,
7 Opt_commit, Opt_min_batch_time, Opt_max_batch_time,
8 - Opt_journal_update, Opt_journal_dev,
9 + Opt_journal_update, Opt_journal_dev, Opt_journal_path,
10 Opt_journal_checksum, Opt_journal_async_commit,
11 Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
12 Opt_data_err_abort, Opt_data_err_ignore,
14 {Opt_max_batch_time, "max_batch_time=%u"},
15 {Opt_journal_update, "journal=update"},
16 {Opt_journal_dev, "journal_dev=%u"},
17 + {Opt_journal_path, "journal_path=%s"},
18 {Opt_journal_checksum, "journal_checksum"},
19 {Opt_journal_async_commit, "journal_async_commit"},
21 @@ -1533,6 +1534,46 @@
23 *journal_devnum = option;
25 + case Opt_journal_path: {
27 + struct inode *journal_inode;
32 + ext4_msg(sb, KERN_ERR,
33 + "Cannot specify journal on remount");
36 + journal_path = match_strdup(&args[0]);
37 + if (!journal_path) {
38 + ext4_msg(sb, KERN_ERR, "error: could not dup "
39 + "journal device string");
43 + error = kern_path(journal_path, LOOKUP_FOLLOW, &path);
45 + ext4_msg(sb, KERN_ERR, "error: could not find "
46 + "journal device path: error %d", error);
47 + kfree(journal_path);
51 + journal_inode = path.dentry->d_inode;
52 + if (!S_ISBLK(journal_inode->i_mode)) {
53 + ext4_msg(sb, KERN_ERR, "error: journal path %s "
54 + "is not a block device", journal_path);
56 + kfree(journal_path);
60 + *journal_devnum = new_encode_dev(journal_inode->i_rdev);
62 + kfree(journal_path);
65 case Opt_journal_checksum:
66 set_opt(sbi->s_mount_opt, JOURNAL_CHECKSUM);