Skip to content
Snippets Groups Projects
Commit 5b7147c3 authored by kalpak's avatar kalpak
Browse files

b=16438
i=adilger
i=girish

Mounting a filesystem with extents feature will fail on big-endian systems since ext3-based ldiskfs is not supported on big-endian systems. This can be over-riden with "bigendian_extents" mount option.
parent 268f6a4e
No related branches found
No related tags found
No related merge requests found
Showing
with 288 additions and 0 deletions
Index: linux-2.6.9-67.0.22/fs/ext3/super.c
===================================================================
--- linux-2.6.9-67.0.22.orig/fs/ext3/super.c
+++ linux-2.6.9-67.0.22/fs/ext3/super.c
@@ -89,6 +89,8 @@ handle_t *ext3_journal_start_sb(struct s
return journal_start(journal, nblocks);
}
+static int bigendian_extents;
+
/*
* The only special thing we need to do here is to make sure that all
* journal_stop calls result in the superblock being marked dirty, so
@@ -657,7 +659,7 @@ enum {
Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0,
Opt_ignore, Opt_barrier, Opt_err, Opt_resize,
Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
- Opt_extents, Opt_noextents, Opt_extdebug,
+ Opt_extents, Opt_noextents, Opt_bigendian_extents, Opt_extdebug,
Opt_mballoc, Opt_nomballoc, Opt_stripe,
};
@@ -711,6 +713,7 @@ static match_table_t tokens = {
{Opt_iopen_nopriv, "iopen_nopriv"},
{Opt_extents, "extents"},
{Opt_noextents, "noextents"},
+ {Opt_bigendian_extents, "bigendian_extents"},
{Opt_extdebug, "extdebug"},
{Opt_barrier, "barrier=%u"},
{Opt_mballoc, "mballoc"},
@@ -1036,6 +1039,9 @@ clear_qf_name:
case Opt_noextents:
clear_opt (sbi->s_mount_opt, EXTENTS);
break;
+ case Opt_bigendian_extents:
+ bigendian_extents = 1;
+ break;
case Opt_extdebug:
set_opt (sbi->s_mount_opt, EXTDEBUG);
break;
@@ -1952,6 +1958,16 @@ static int ext3_fill_super (struct super
NULL, 0))
goto failed_mount;
+#ifdef __BIG_ENDIAN
+ if (bigendian_extents == 0) {
+ printk(KERN_ERR "EXT3-fs: e2fsck is not guaranteed to work "
+ "correctly on the filesystem if EXTENTS feature is "
+ "used on big-endian systems. Use \"bigendian_extents\" "
+ "mount option to override.\n");
+ goto failed_mount;
+ }
+#endif
+
set_sb_time_gran(sb, 1000000000U);
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
((sbi->s_mount_opt & EXT3_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
Index: linux-2.6.18-92.1.6/fs/ext3/super.c
===================================================================
--- linux-2.6.18-92.1.6.orig/fs/ext3/super.c
+++ linux-2.6.18-92.1.6/fs/ext3/super.c
@@ -71,6 +71,8 @@ static void ext3_unlockfs(struct super_b
static void ext3_write_super (struct super_block * sb);
static void ext3_write_super_lockfs(struct super_block *sb);
+static int bigendian_extents;
+
/*
* Wrappers for journal_start/end.
*
@@ -706,7 +708,7 @@ enum {
Opt_ignore, Opt_barrier, Opt_err, Opt_resize, Opt_usrquota,
Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
Opt_grpquota,
- Opt_extents, Opt_noextents, Opt_extdebug,
+ Opt_extents, Opt_noextents, Opt_bigendian_extents, Opt_extdebug,
Opt_mballoc, Opt_nomballoc, Opt_stripe,
};
@@ -766,6 +768,7 @@ static match_table_t tokens = {
{Opt_barrier, "barrier=%u"},
{Opt_extents, "extents"},
{Opt_noextents, "noextents"},
+ {Opt_bigendian_extents, "bigendian_extents"},
{Opt_extdebug, "extdebug"},
{Opt_mballoc, "mballoc"},
{Opt_nomballoc, "nomballoc"},
@@ -1129,6 +1132,9 @@ clear_qf_name:
case Opt_noextents:
clear_opt (sbi->s_mount_opt, EXTENTS);
break;
+ case Opt_bigendian_extents:
+ bigendian_extents = 1;
+ break;
case Opt_extdebug:
set_opt (sbi->s_mount_opt, EXTDEBUG);
break;
@@ -2224,6 +2230,15 @@ static int ext3_fill_super (struct super
goto failed_mount;
}
+#ifdef __BIG_ENDIAN
+ if (bigendian_extents == 0) {
+ printk(KERN_ERR "EXT3-fs: extents feature is not guaranteed to "
+ "work on big-endian systems. Use \"bigendian_extents\" "
+ "mount option to override.\n");
+ goto failed_mount;
+ }
+#endif
+
bgl_lock_init(&sbi->s_blockgroup_lock);
sbi->s_last_alloc_group = -1;
Index: linux-2.6.16.60-0.27/fs/ext3/super.c
===================================================================
--- linux-2.6.16.60-0.27.orig/fs/ext3/super.c
+++ linux-2.6.16.60-0.27/fs/ext3/super.c
@@ -100,6 +100,8 @@ handle_t *ext3_journal_start_sb(struct s
return journal_start(journal, nblocks);
}
+static int bigendian_extents;
+
/*
* The only special thing we need to do here is to make sure that all
* journal_stop calls result in the superblock being marked dirty, so
@@ -703,7 +705,7 @@ enum {
Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota,
Opt_ignore, Opt_barrier, Opt_err, Opt_resize, Opt_usrquota,
Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
- Opt_extents, Opt_noextents, Opt_extdebug,
+ Opt_extents, Opt_noextents, Opt_bigendian_extents, Opt_extdebug,
Opt_mballoc, Opt_nomballoc, Opt_stripe,
Opt_grpquota
};
@@ -762,6 +764,7 @@ static match_table_t tokens = {
{Opt_iopen_nopriv, "iopen_nopriv"},
{Opt_extents, "extents"},
{Opt_noextents, "noextents"},
+ {Opt_bigendian_extents, "bigendian_extents"},
{Opt_extdebug, "extdebug"},
{Opt_barrier, "barrier=%u"},
{Opt_mballoc, "mballoc"},
@@ -1122,6 +1125,9 @@ clear_qf_name:
case Opt_noextents:
clear_opt (sbi->s_mount_opt, EXTENTS);
break;
+ case Opt_bigendian_extents:
+ bigendian_extents = 1;
+ break;
case Opt_extdebug:
set_opt (sbi->s_mount_opt, EXTDEBUG);
break;
@@ -2052,6 +2058,16 @@ static int ext3_fill_super (struct super
NULL, 0))
goto failed_mount;
+#ifdef __BIG_ENDIAN
+ if (bigendian_extents == 0) {
+ printk(KERN_ERR "EXT3-fs: e2fsck is not guaranteed to work "
+ "correctly on the filesystem if EXTENTS feature is "
+ "used on big-endian systems. Use \"bigendian_extents\" "
+ "mount option to override.\n");
+ goto failed_mount;
+ }
+#endif
+
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
((sbi->s_mount_opt & EXT3_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
Index: linux-2.6.5-7.312/fs/ext3/super.c
===================================================================
--- linux-2.6.5-7.312.orig/fs/ext3/super.c
+++ linux-2.6.5-7.312/fs/ext3/super.c
@@ -84,6 +84,8 @@ handle_t *ext3_journal_start(struct inod
return journal_start(journal, nblocks);
}
+static int bigendian_extents;
+
/*
* The only special thing we need to do here is to make sure that all
* journal_stop calls result in the superblock being marked dirty, so
@@ -601,7 +603,7 @@ enum {
Opt_ignore, Opt_barrier,
Opt_err,
Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
- Opt_extents, Opt_noextents, Opt_extdebug,
+ Opt_extents, Opt_noextents, Opt_bigendian_extents, Opt_extdebug,
Opt_mballoc, Opt_nomballoc, Opt_stripe,
};
@@ -649,6 +651,7 @@ static match_table_t tokens = {
{Opt_iopen_nopriv, "iopen_nopriv"},
{Opt_extents, "extents"},
{Opt_noextents, "noextents"},
+ {Opt_bigendian_extents, "bigendian_extents"},
{Opt_extdebug, "extdebug"},
{Opt_barrier, "barrier=%u"},
{Opt_mballoc, "mballoc"},
@@ -886,6 +889,9 @@ static int parse_options (char * options
case Opt_noextents:
clear_opt (sbi->s_mount_opt, EXTENTS);
break;
+ case Opt_bigendian_extents:
+ bigendian_extents = 1;
+ break;
case Opt_extdebug:
set_opt (sbi->s_mount_opt, EXTDEBUG);
break;
@@ -1450,6 +1456,16 @@ static int ext3_fill_super (struct super
0))
goto failed_mount;
+#ifdef __BIG_ENDIAN
+ if (bigendian_extents == 0) {
+ printk(KERN_ERR "EXT3-fs: e2fsck is not guaranteed to work "
+ "correctly on the filesystem if EXTENTS feature is "
+ "used on big-endian systems. Use \"bigendian_extents\" "
+ "mount option to override.\n");
+ goto failed_mount;
+ }
+#endif
+
sb->s_flags |= MS_ONE_SECOND;
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
((sbi->s_mount_opt & EXT3_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
Index: linux-2.6.22.14/fs/ext3/super.c
===================================================================
--- linux-2.6.22.14.orig/fs/ext3/super.c
+++ linux-2.6.22.14/fs/ext3/super.c
@@ -71,6 +71,8 @@ static void ext3_unlockfs(struct super_b
static void ext3_write_super (struct super_block * sb);
static void ext3_write_super_lockfs(struct super_block *sb);
+static int bigendian_extents;
+
/*
* Wrappers for journal_start/end.
*
@@ -700,7 +702,7 @@ enum {
Opt_ignore, Opt_barrier, Opt_err, Opt_resize, Opt_usrquota,
Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
Opt_grpquota,
- Opt_extents, Opt_noextents, Opt_extdebug,
+ Opt_extents, Opt_noextents, Opt_bigendian_extents, Opt_extdebug,
Opt_mballoc, Opt_nomballoc, Opt_stripe,
};
@@ -756,6 +758,7 @@ static match_table_t tokens = {
{Opt_barrier, "barrier=%u"},
{Opt_extents, "extents"},
{Opt_noextents, "noextents"},
+ {Opt_bigendian_extents, "bigendian_extents"},
{Opt_extdebug, "extdebug"},
{Opt_mballoc, "mballoc"},
{Opt_nomballoc, "nomballoc"},
@@ -1110,6 +1113,9 @@ clear_qf_name:
case Opt_noextents:
clear_opt (sbi->s_mount_opt, EXTENTS);
break;
+ case Opt_bigendian_extents:
+ bigendian_extents = 1;
+ break;
case Opt_extdebug:
set_opt (sbi->s_mount_opt, EXTDEBUG);
break;
@@ -2208,6 +2214,15 @@ static int ext3_fill_super (struct super
goto failed_mount;
}
+#ifdef __BIG_ENDIAN
+ if (bigendian_extents == 0) {
+ printk(KERN_ERR "EXT3-fs: extents feature is not guaranteed to "
+ "work on big-endian systems. Use \"bigendian_extents\" "
+ "mount option to override.\n");
+ goto failed_mount;
+ }
+#endif
+
bgl_lock_init(&sbi->s_blockgroup_lock);
sbi->s_last_alloc_group = -1;
...@@ -28,3 +28,4 @@ ext3-xattr-no-update-ctime-rhel4.patch ...@@ -28,3 +28,4 @@ ext3-xattr-no-update-ctime-rhel4.patch
ext3-check-bad-inode.patch ext3-check-bad-inode.patch
ext3-fiemap-2.6-rhel4.patch ext3-fiemap-2.6-rhel4.patch
ext3-get-raid-stripe-from-sb.patch ext3-get-raid-stripe-from-sb.patch
ext3-big-endian-check-2.6-rhel4.patch
...@@ -25,3 +25,4 @@ ext3-block-bitmap-validation-2.6-rhel5.patch ...@@ -25,3 +25,4 @@ ext3-block-bitmap-validation-2.6-rhel5.patch
ext3-xattr-no-update-ctime-2.6.22-vanilla.patch ext3-xattr-no-update-ctime-2.6.22-vanilla.patch
ext3-journal-chksum-2.6.18-vanilla.patch ext3-journal-chksum-2.6.18-vanilla.patch
ext3-get-raid-stripe-from-sb.patch ext3-get-raid-stripe-from-sb.patch
ext3-big-endian-check-2.6-rhel5.patch
...@@ -30,3 +30,4 @@ ext3-xattr-no-update-ctime-2.6-sles10.patch ...@@ -30,3 +30,4 @@ ext3-xattr-no-update-ctime-2.6-sles10.patch
ext3-check-bad-inode.patch ext3-check-bad-inode.patch
ext3-journal-chksum-2.6.18-vanilla.patch ext3-journal-chksum-2.6.18-vanilla.patch
ext3-get-raid-stripe-from-sb.patch ext3-get-raid-stripe-from-sb.patch
ext3-big-endian-check-2.6-sles10.patch
...@@ -27,3 +27,4 @@ ext3-print-inum-in-htree-warning.patch ...@@ -27,3 +27,4 @@ ext3-print-inum-in-htree-warning.patch
ext3-xattr-no-update-ctime-suse.patch ext3-xattr-no-update-ctime-suse.patch
ext3-check-bad-inode.patch ext3-check-bad-inode.patch
ext3-get-raid-stripe-from-sb-2.6-suse.patch ext3-get-raid-stripe-from-sb-2.6-suse.patch
ext3-big-endian-check-2.6-suse.patch
...@@ -25,3 +25,4 @@ ext3-print-inum-in-htree-warning.patch ...@@ -25,3 +25,4 @@ ext3-print-inum-in-htree-warning.patch
ext3-xattr-no-update-ctime-2.6.22-vanilla.patch ext3-xattr-no-update-ctime-2.6.22-vanilla.patch
ext3-check-bad-inode.patch ext3-check-bad-inode.patch
ext3-get-raid-stripe-from-sb.patch ext3-get-raid-stripe-from-sb.patch
ext3-big-endian-check-2.6.22-vanilla.patch
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment