Whamcloud - gitweb
LU-8364 ldiskfs: fixes for failover mode.
[fs/lustre-release.git] / ldiskfs / kernel_patches / patches / rhel6.3 / ext4-journal-path-opt.patch
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
4 @@ -1274,7 +1274,7 @@
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,
13 @@ -1323,6 +1323,7 @@
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"},
20         {Opt_abort, "abort"},
21 @@ -1533,6 +1534,46 @@
22                                 return 0;
23                         *journal_devnum = option;
24                         break;
25 +               case Opt_journal_path: {
26 +                       char *journal_path;
27 +                       struct inode *journal_inode;
28 +                       struct path path;
29 +                       int error;
30 +
31 +                       if (is_remount) {
32 +                               ext4_msg(sb, KERN_ERR,
33 +                                       "Cannot specify journal on remount");
34 +                               return -1;
35 +                       }
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");
40 +                               return -1;
41 +                       }
42 +
43 +                       error = kern_path(journal_path, LOOKUP_FOLLOW, &path);
44 +                       if (error) {
45 +                               ext4_msg(sb, KERN_ERR, "error: could not find "
46 +                                       "journal device path: error %d", error);
47 +                                       kfree(journal_path);
48 +                               return -1;
49 +                       }
50 +
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);
55 +                               path_put(&path);
56 +                               kfree(journal_path);
57 +                               return -1;
58 +                       }
59 +
60 +                       *journal_devnum = new_encode_dev(journal_inode->i_rdev);
61 +                       path_put(&path);
62 +                       kfree(journal_path);
63 +                       break;
64 +               }
65                 case Opt_journal_checksum:
66                         set_opt(sbi->s_mount_opt, JOURNAL_CHECKSUM);
67                         break;