add patch fix-compile-warning-when-using-JBUFFER_TRACE
[ext4-patch-queue.git] / dont-update-s_rev_level-if-not-required
blob45d4067c1446baafa614b2fa3ddb997045d51e82
1 ext4: don't update s_rev_level if not required
3 From: Andreas Dilger <adilger@dilger.ca>
5 Don't update the superblock s_rev_level during mount if it isn't
6 actually necessary, only if superblock features are being set by
7 the kernel.  This was originally added for ext3 since it always
8 set the INCOMPAT_RECOVER and HAS_JOURNAL features during mount,
9 but this is not needed since no journal mode was added to ext4.
11 That will allow Geert to mount his 20-year-old ext2 rev 0.0 m68k
12 filesystem, as a testament of the backward compatibility of ext4.
14 Fixes: 0390131ba84f ("ext4: Allow ext4 to run without a journal")
15 Signed-off-by: Andreas Dilger <adilger@dilger.ca>
16 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
17 ---
18  fs/ext4/ext4.h  | 6 +++++-
19  fs/ext4/inode.c | 1 -
20  fs/ext4/super.c | 1 -
21  3 files changed, 5 insertions(+), 3 deletions(-)
23 diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
24 index 508a37ec9271..b8fde74ff76d 100644
25 --- a/fs/ext4/ext4.h
26 +++ b/fs/ext4/ext4.h
27 @@ -1665,6 +1665,8 @@ static inline void ext4_clear_state_flags(struct ext4_inode_info *ei)
28  #define EXT4_FEATURE_INCOMPAT_INLINE_DATA      0x8000 /* data in inode */
29  #define EXT4_FEATURE_INCOMPAT_ENCRYPT          0x10000
31 +extern void ext4_update_dynamic_rev(struct super_block *sb);
33  #define EXT4_FEATURE_COMPAT_FUNCS(name, flagname) \
34  static inline bool ext4_has_feature_##name(struct super_block *sb) \
35  { \
36 @@ -1673,6 +1675,7 @@ static inline bool ext4_has_feature_##name(struct super_block *sb) \
37  } \
38  static inline void ext4_set_feature_##name(struct super_block *sb) \
39  { \
40 +       ext4_update_dynamic_rev(sb); \
41         EXT4_SB(sb)->s_es->s_feature_compat |= \
42                 cpu_to_le32(EXT4_FEATURE_COMPAT_##flagname); \
43  } \
44 @@ -1690,6 +1693,7 @@ static inline bool ext4_has_feature_##name(struct super_block *sb) \
45  } \
46  static inline void ext4_set_feature_##name(struct super_block *sb) \
47  { \
48 +       ext4_update_dynamic_rev(sb); \
49         EXT4_SB(sb)->s_es->s_feature_ro_compat |= \
50                 cpu_to_le32(EXT4_FEATURE_RO_COMPAT_##flagname); \
51  } \
52 @@ -1707,6 +1711,7 @@ static inline bool ext4_has_feature_##name(struct super_block *sb) \
53  } \
54  static inline void ext4_set_feature_##name(struct super_block *sb) \
55  { \
56 +       ext4_update_dynamic_rev(sb); \
57         EXT4_SB(sb)->s_es->s_feature_incompat |= \
58                 cpu_to_le32(EXT4_FEATURE_INCOMPAT_##flagname); \
59  } \
60 @@ -2675,7 +2680,6 @@ do {                                                                      \
62  #endif
64 -extern void ext4_update_dynamic_rev(struct super_block *sb);
65  extern int ext4_update_compat_feature(handle_t *handle, struct super_block *sb,
66                                         __u32 compat);
67  extern int ext4_update_rocompat_feature(handle_t *handle,
68 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
69 index 9c3402ec85bc..2b6eefbc3b34 100644
70 --- a/fs/ext4/inode.c
71 +++ b/fs/ext4/inode.c
72 @@ -5345,7 +5345,6 @@ static int ext4_do_update_inode(handle_t *handle,
73                 err = ext4_journal_get_write_access(handle, EXT4_SB(sb)->s_sbh);
74                 if (err)
75                         goto out_brelse;
76 -               ext4_update_dynamic_rev(sb);
77                 ext4_set_feature_large_file(sb);
78                 ext4_handle_sync(handle);
79                 err = ext4_handle_dirty_super(handle, sb);
80 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
81 index fb12d3c17c1b..6e4cac646345 100644
82 --- a/fs/ext4/super.c
83 +++ b/fs/ext4/super.c
84 @@ -2249,7 +2249,6 @@ static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es,
85                 es->s_max_mnt_count = cpu_to_le16(EXT4_DFL_MAX_MNT_COUNT);
86         le16_add_cpu(&es->s_mnt_count, 1);
87         ext4_update_tstamp(es, s_mtime);
88 -       ext4_update_dynamic_rev(sb);
89         if (sbi->s_journal)
90                 ext4_set_feature_journal_needs_recovery(sb);